使用 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 个值的主要内容,如果未能解决你的问题,请参考以下文章

获取列中具有前 2 个值之一的所有行

如何使用选择查询为每个唯一的第二个值获取一个值中的最小值?

SharePoint:如何使用列表中的 CAML 查询获取前 5 条记录

选择条件列但获取子查询返回超过 1 个值

PHP函数获取数组的前5个值

AWS AppSync Lambda 解析器获取查询返回类型