C# 使用LINQ分页和存储过程分页的关键点是什么?
我对LINQ分页和存储过程分页有一个问题:C# 使用LINQ分页和存储过程分页的关键点是什么?,c#,sql-server,linq,stored-procedures,pagination,C#,Sql Server,Linq,Stored Procedures,Pagination,我对LINQ分页和存储过程分页有一个问题: 如果我使用LINQ分页,那么使用Microsoft的逻辑是什么?意味着它将所有数据加载到列表中,然后执行分页逻辑 例如,如果我在SQL Server数据库中有100万条记录,并且我想使用LINQ分页,那么它将如何工作 代码段: _list = _list.Skip(StartIndex).Take(FetchRecords).ToList(); 如果LINQ首先加载所有记录,那么我是否必须进行存储过程分页 你需要记住这一点 ToList(IEnum
_list = _list.Skip(StartIndex).Take(FetchRecords).ToList();
你需要记住这一点 ToList(IEnumerable)方法强制立即执行查询求值,并返回包含查询结果的列表 ie没有ToList方法调用,查询不会执行,因此没有数据 其次,您还应该使用OrderBy方法,例如
OrderBy(o=>o.ID)代码>您应该明确知道跳过和获取订单项的顺序
进一步考虑使用“何处”和“选择”方法来限制数据有效载荷。
这取决于您如何巧妙地使用LINQ…如果在使用.Skip()
和.Take()
之前对查询执行.ToList()。但那只是因为你这么说的。如果您使用IQueryable
操作并应用Skip/Take,则EF将使用SQL server提供的任何基于服务器的分页机制,并且只返回您使用.Take(n)
操作符请求的行