使用LINQ获取分页数据

时间:2012-11-06 11:22:39

标签: c# linq linq-to-sql pagination

我正在使用LINQ实现分页,我正在考虑我可能遇到的性能问题。可以说我的页面大小为10,我在表中有100条记录。 如果我要使用以下

var myList = _dataContext.Person.Skip(PageNumber * PageSize).Take(10);
它会得到我想要的数据。现在,如果我采取这种情况,并将其应用于1,000,000条记录。这会影响性能吗?是否更值得使用sql存储过程,性能明智吗?

2 个答案:

答案 0 :(得分:2)

如果您在ToList之后执行了.Person,则效率非常低。你有什么应该没关系

答案 1 :(得分:1)

存储过程与Linq提供程序为您生成的纯SQL文本相比没有任何优势。

对于您的查询,

BTW 会生成以下SQL之类的内容

SELECT /* [t0] fields */
FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY /* [t0] fields */
    FROM [Person] AS [t0]
    ) AS [t1]
WHERE [t1].[ROW_NUMBER] BETWEEN @p0 + 1 AND @p0 + @p1
ORDER BY [t1].[ROW_NUMBER]

只有当您使用myList变量时才会执行此操作(例如,调用ToList()Count(),枚举它)。因此,在数据库中有多少人并不重要(好吧,但这是数据库部分,而不是内存中的对象),并且使用存储过程不会提高性能。