gpt4 book ai didi

c# - 在 OData URL 查询上启用延迟加载

转载 作者:行者123 更新时间:2023-11-30 16:58:52 25 4
gpt4 key购买 nike

从 Web API 端点 OData 查询返回 IEnumerable 时,它似乎会枚举\在应用查询选项之前进行预加载。这就是我的意思:

一些类型:

public class SomeType
{
public int SomeProp { get; set; }
}

端点:

public class SomeTypeController : ApiController
{

[EnableQuery]
public IEnumerable<SomeType> Get()
{

return GetSomeTypes();

}
IEnumerable<SomeType> GetSomeTypes()
{
for (var i = 0; i < 10; i++)
{

Trace.WriteLine(i);

yield return new SomeType { SomeProp = i };
}
}
}

当请求 /api/sometype?$top=2 时,我希望跟踪 2 行 (0,1),但我看到循环一直持续到结尾。

我期望在返回之前调用 Take(2) 的行为相同:

端点:

public class SomeTypeController : ApiController
{

[EnableQuery]
public IEnumerable<SomeType> Get()
{

return GetSomeTypes().Take(2);

}
IEnumerable<SomeType> GetSomeTypes()
{
for (var i = 0; i < 10; i++)
{

Trace.WriteLine(i);

yield return new SomeType { SomeProp = i };
}
}
}

有什么方法可以打开 OData 查询选项的延迟加载吗?

查询选项是我使用 OData 的唯一原因,因此欢迎使用可以实现自动查询选项的替代方案。

最佳答案

IEnumerable 枚举 10 次,因为应用了默认的 orderby。

此行为是设计使然,因为 $top 需要稳定排序。

如果您不想这样,您可以将 EnsureStableOrdering 设置为 false。

    [EnableQuery(EnsureStableOrdering = false)]
public IEnumerable<SomeType> Get()
{
return GetSomeTypes().Take(2);
}

关于c# - 在 OData URL 查询上启用延迟加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24597019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com