我正在使用Linq / EF4.1从数据库中提取一些结果,并希望将结果限制为(X)个最新结果。其中X是用户设置的数字。
有没有办法做到这一点?
我目前正在将它们传递回来,List
好像这将有助于限制结果集。虽然我可以通过循环直到X来限制它,但我只是假设不传递多余的数据。
万一它是相关的...从SQL Server数据库运行的C#MVC3项目。
Answers:
使用Take
功能
int numberOfrecords=10; // read from user
listOfItems.OrderByDescending(x => x.CreatedDate).Take(numberOfrecords)
假设listOfItems
是您的实体对象的列表,并且CreatedDate
是一个具有创建日期的值的字段(此处用于通过降序获取最新商品来进行订购)。
Take()函数从序列的开头返回指定数量的连续元素。
results = results.OrderByDescending(x=>x.Date).Take(10);
OrderByDescending将按日期/时间属性(或您要用来获取最新的w / e逻辑)对项目进行排序,而Take则将限制为前x个项目(由于排序,第一个是最新的)。
编辑:要返回一些不在第一行开始的行,请使用Skip()
:
results = results.OrderByDescending(x=>x.Date).Skip(50).Take(10);
Take()
在转换为列表之前,请使用。这样,EF可以优化它创建的查询,并仅返回您需要的数据。