我正在使用分页创建页面,并获得了参数page
和numberOfElementsPerPage
的方法。
在此方法中,我使用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条记录甚至更多,这是非常糟糕的解决方案。那么最好的解决方案是什么?
答案 0 :(得分:1)
那么最好的解决方案是什么?
这是最好的解决方案。
如果是,我认为这是非常糟糕的解决方案
你是对的,如果以这种方式实施,那将是一个非常糟糕的解决方案。幸运的是, not 以这种方式实现:来自[self valueForKey:@"item1a"];
和Skip
的值以特定于SQL方言的方式传递到您的RDBMS服务器,此时数据库决定如何查找和提供记录。对于SQL Server,使用与此类似的语法:
Take
答案 1 :(得分:0)
如果它是实体框架DataContext,那么它会生成适当的SQL,只检索您需要的记录。您可以使用SQL事件探查器来验证它。
答案 2 :(得分:0)
我同意所有答案,我只想补充一点,您实际上可以看到生成的SQL查询来确认。请查看这篇文章