81

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

有没有办法做到这一点?

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

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

4

3 回答 3

157

使用Take功能

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

假设listOfItems是您的实体对象的列表,并且CreatedDate是一个具有创建日期值的字段(此处用于按降序进行排序以获取最近的项目)。

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

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

于 2012-06-04T15:00:56.497 回答
36
results = results.OrderByDescending(x=>x.Date).Take(10);

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

编辑:要返回一些不是从第一行开始的行,请使用Skip()

results = results.OrderByDescending(x=>x.Date).Skip(50).Take(10);
于 2012-06-04T15:00:59.463 回答
19

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

于 2012-06-04T15:01:08.027 回答