【发布时间】:2014-07-06 14:46:07
【问题描述】:
似乎在从 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 的唯一原因,因此欢迎使用可以实现自动查询选项的替代方案。
【问题讨论】:
标签: c# odata lazy-loading asp.net-web-api2