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

Jar*_*red 63 c# linq entity-framework asp.net-mvc-3

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

有没有办法做到这一点?

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

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

Shy*_*yju 117

使用该Take功能

int numberOfrecords=10; // read from user
listOfItems.OrderByDescending(x => x.CreatedDate).Take(numberOfrecords)
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 虽然我并不真正需要最近部分的帮助(我对问题的措辞很糟糕),但这正是我所需要的!谢谢! (2认同)

Mr.*_* TA 26

results = results.OrderByDescending(x=>x.Date).Take(10);
Run Code Online (Sandbox Code Playgroud)

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

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

results = results.OrderByDescending(x=>x.Date).Skip(50).Take(10);
Run Code Online (Sandbox Code Playgroud)

  • @FrenkyB请看答案 - 我更新了它以解决您的跟进问题. (2认同)

Red*_*ter 14

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

  • @WM先使用Take将允许EF在SQL查询中进行分页.如果您首先执行ToList,则所有结果将从SQL中撤回,然后将在内存中完成分页. (3认同)