限制从Linq列表中返回的结果数
我正在使用Linq / EF4.1从数据库中提取一些结果,并希望将结果限制为(X)最近的结果。 其中X是用户设定的数字。
有没有办法做到这一点?
如果这将有助于限制结果集,我目前将它们作为List
传回。 虽然我可以通过循环来限制这个,直到我打到X我只是假设不传递额外的数据。
以防万一它是相关的…从SQL Server数据库运行的C#MVC3项目。
使用Take
function
int numberOfrecords=10; // read from user listOfItems.OrderByDescending(x => x.CreatedDate).Take(numberOfrecords)
假设listOfItems
是你的实体对象的List,而CreatedDate
是一个有创builddate值的字段(在这里用来降序获取最近的项目)。
Take()函数从序列的开始处返回指定数量的连续元素。
results = results.OrderByDescending(x=>x.Date).Take(10);
OrderByDescending将通过你的date/时间属性(或你想用来获取最新的W / e逻辑)对项目进行sorting,Take将限制到第一个x项目(首先是最近的,由于sorting)。
编辑:要返回一些行不是从第一行开始,使用Skip()
:
results = results.OrderByDescending(x=>x.Date).Skip(50).Take(10);
使用Take()
,然后转换为List。 这样EF可以优化它创build的查询,只返回你需要的数据。