使用 lambda 查询获取前 5 个值
Posted
技术标签:
【中文标题】使用 lambda 查询获取前 5 个值【英文标题】:Get top 5 values with lambda query 【发布时间】:2013-03-30 07:52:17 【问题描述】:这是我的代码,
rptAnnouncement.DataSource = DbContext.Announcements
.Where(n => n.Expire_Date.Value.Date >= DateTime.Now.Date)
.ToList();
我使用 lambda 从数据库中获取公告数据并将这些数据绑定到 ASP.NET 转发器(rptAnnouncement
)。
但是这个查询返回了所有的数据,我只想获取前 5 条(前 5 条)记录,比如 MS SQL Server 的select top 5 * from database
。
【问题讨论】:
LINQ query to select top five的可能重复 【参考方案1】:您可以使用OrderBy()
对元素进行排序,然后使用Take()
获取前5 个。
rptAnnouncement.DataSource = DbContext.Announcements
.Where(n => n.Expire_Date.Value.Date >= DateTime.Now.Date)
.OrderBy(n => n.Expire_Date.Value.Date)
.Take(5);
备注
您可以使用OrderByDescending()
降序排列
调用ToList()
,然后调用Take()
将获得所有项目,然后获得前5 名,而不是只获得前5 名。
【讨论】:
谢谢,我确实忘记按日期订购:D 哈哈:D。顺便说一句丹尼尔,我如何设置(升序,降序)排序!【参考方案2】:如果你只想要前 5 名,那么你可以使用下面的。
rptAnnouncement.DataSource = DbContext.Announcements.Where(n => n.Expire_Date.Value.Date >= DateTime.Now.Date).Take(5).ToList();
这里有更多细节
http://msdn.microsoft.com/en-us/library/bb503062.aspx
【讨论】:
【参考方案3】:只需在LINQ
中使用Take(n)
rptAnnouncement.DataSource = DbContext.Announcements
.Where(n => n.Expire_Date.Value.Date >= DateTime.Now.Date)
.Take(5).ToList();
【讨论】:
应该是.Take(5).ToList(),而不是相反。以上是关于使用 lambda 查询获取前 5 个值的主要内容,如果未能解决你的问题,请参考以下文章