LINQ to Entities Skip and Take

时间:2015-06-27 11:08:54

标签: c# linq entity-framework orm entity

我正在使用分页创建页面,并获得了参数pagenumberOfElementsPerPage的方法。

在此方法中,我使用Linq to Entities来加载页面元素:

public List<Item> GetElements(int page, int numberOfElementsPerPage)
{
    return DataContext.Items.OrderBy(x => x.Id).Skip((page-1)*numberOfElementsPerPage).Take(numberOfElementsPerPage);
}

我想问一下,Skip / Take如何运作?它首先需要来自数据库,订单以及Skip / Take的所有记录吗?如果是,我认为如果数据库获得100000条记录甚至更多,这是非常糟糕的解决方案。那么最好的解决方案是什么?

3 个答案:

答案 0 :(得分:1)

  

那么最好的解决方案是什么?

这是最好的解决方案。

  

如果是,我认为这是非常糟糕的解决方案

你是对的,如果以这种方式实施,那将是一个非常糟糕的解决方案。幸运的是, not 以这种方式实现:来自[self valueForKey:@"item1a"]; Skip的值以特定于SQL方言的方式传递到您的RDBMS服务器,此时数据库决定如何查找和提供记录。对于SQL Server,使用与此类似的语法:

Take

答案 1 :(得分:0)

如果它是实体框架DataContext,那么它会生成适当的SQL,只检索您需要的记录。您可以使用SQL事件探查器来验证它。

答案 2 :(得分:0)

我同意所有答案,我只想补充一点,您实际上可以看到生成的SQL查询来确认。请查看这篇文章

How do I view the SQL generated by the entity framework?