我正在使用Linq / EF4.1从数据库中提取一些结果,并希望将结果限制为(X)最近的结果。其中X是用户设置的数字。
有办法做到这一点吗?
我目前正在将它们作为List
传回,如果这有助于限制结果集。虽然我可以通过循环来限制它,直到我点击X,我只是假设没有传递额外的数据。
以防万一相关...... 从SQL Server数据库运行的C#MVC3项目。
答案 0 :(得分:103)
使用Take
功能
int numberOfrecords=10; // read from user
listOfItems.OrderByDescending(x => x.CreatedDate).Take(numberOfrecords)
假设listOfItems
是您的实体对象的列表,而CreatedDate
是一个具有日期创建值的字段(此处用于通过降序来获取最近的项目)。
Take()函数从a的开头返回指定数量的连续元素 序列
答案 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可以优化它创建的查询,只返回您需要的数据。