从Linq限制列表中返回的结果数量

时间:2012-06-04 14:58:39

标签: c# asp.net-mvc-3 linq entity-framework

我正在使用Linq / EF4.1从数据库中提取一些结果,并希望将结果限制为(X)最近的结果。其中X是用户设置的数字。

有办法做到这一点吗?

我目前正在将它们作为List传回,如果这有助于限制结果集。虽然我可以通过循环来限制它,直到我点击X,我只是假设没有传递额外的数据。

以防万一相关...... 从SQL Server数据库运行的C#MVC3项目。

3 个答案:

答案 0 :(得分:103)

使用Take功能

int numberOfrecords=10; // read from user
listOfItems.OrderByDescending(x => x.CreatedDate).Take(numberOfrecords)

假设listOfItems是您的实体对象的列表,而CreatedDate是一个具有日期创建值的字段(此处用于通过降序来获取最近的项目)。

  

Take()函数从a的开头返回指定数量的连续元素   序列

http://msdn.microsoft.com/en-us/library/bb503062.aspx

答案 1 :(得分:23)

results = results.OrderByDescending(x=>x.Date).Take(10);

OrderByDescending将按您的日期/时间属性(或您想要用于获取最新的w / e逻辑)对项目进行排序,并且Take将限制为前x个项目(由于订购,首先是最近的项目。) / p>

修改:要返回某些不在第一行开头的行,请使用Skip()

results = results.OrderByDescending(x=>x.Date).Skip(50).Take(10);

答案 2 :(得分:12)

在转换为List之前使用Take()。这样,EF可以优化它创建的查询,只返回您需要的数据。