CSh*_*ner 5 c# linq orm entity entity-framework
我正在创建带有分页的页面,并获得了采用参数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);
}
Run Code Online (Sandbox Code Playgroud)
我想问的是,这个Skip/如何Take工作?它是否首先从数据库中获取所有记录,然后订购Skip/ Take?如果是的话,我认为如果数据库有 100000 条记录甚至更多,这是非常糟糕的解决方案。那么最好的解决方案是什么?
那么最好的解决方案是什么?
这是最好的解决方案。
如果是的话,我认为这是一个非常糟糕的解决方案
你是对的,如果以这种方式实现,这将是一个非常糟糕的解决方案。幸运的是,它不是以这种方式实现的:来自 RDBMS 服务器的值Skip和Take以特定于 SQL 方言的方式传递到 RDBMS 服务器,此时数据库决定如何查找记录并向您提供记录。对于 SQL Server,使用与此类似的语法:
SELECT ...
FROM ...
WHERE ...
...
OFFSET <skip-value> ROWS
FETCH NEXT <take-value> ROWS ONLY;
Run Code Online (Sandbox Code Playgroud)