EF linq在哪里跳过/执行?

时间:2014-11-03 10:32:57

标签: c# linq entity-framework

我有:

IQueryable<Entity> query = (from e in Context.Set<TEntity>() select e);
IEnumerable<TEntity> result = query.OrderBy(x=>x.Property).Skip(10).Take(10);

OrderBy / Skip / Take返回IEnumerable<T>。我担心会发生什么,所有的结果都将被返回,然后Linq将被用来只占用它们的一部分。

我的问题是:OrderBy / Skip和Take是否包含在已发布的SQL查询中,以便只返回所请求的总结果子集?

3 个答案:

答案 0 :(得分:3)

  

OrderBy / Skip / Take返回IEnumerable<T>

OrderBy has an overload that returns IOrderedQueryable<T>,不仅IOrderedEnumerable<T>SkipTake也是如此。 C#编译器非常聪明,只要不强制它执行其他操作,就会优先选择返回IEnumerable<T>的重载。只要您没有过早地将其转换为IEnumerable,该操作将在数据库中执行。

答案 1 :(得分:2)

  

OrderBy / Skip和Take是否包含在已发布的SQL查询中,以便仅返回所请求的总结果子集?

是的,所有这些方法都受支持,它们将转换为SQL。整个列表为here,因为您可以看到每个方法都有重载IQueryable<T>

答案 2 :(得分:1)

是的,它们被转换为SQL并直接针对数据库执行。