如何选择组中的最后一行

Posted

技术标签:

【中文标题】如何选择组中的最后一行【英文标题】:how can i select last row in a group 【发布时间】:2016-12-08 05:36:10 【问题描述】:

我在获取每个组的最后一行时遇到问题。我正在使用 Linq 查询来检索组。 这是我的 LINQ 查询。

return View(db.tblMsgs.OrderByDescending(a => a.Id)
    .GroupBy(a => new  a.Sender, a.Receiver ).Select(x => x.FirstOrDefault())
    .Where(a => a.Receiver == username).ToList());

使用FirstOfDefault() 我获得了组中的第一行。 使用 LastOrDefault() 我遇到了运行时异常。

【问题讨论】:

你得到了什么运行时异常? 添加你面临的架构和错误 Last and LastOrDefault not supported的可能重复 当我使用 lastordefault 时出现此错误。 LINQ to Entities 无法识别方法 'TicketGeneration.Models.tblMsg LastOrDefault[tblMsg](System.Collections.Generic.IEnumerable`1[TicketGeneration.Models.tblMsg])' 方法和此方法无法翻译成商店表达式。 【参考方案1】:

这也是我遇到的,现在有一段时间了。

经过一些研究,我发现唯一可行的方法是反转您想要获取最后一项并获取第一项的列表。

这背后的原因是 SQL 语言没有SELECT BOTTOM 而是SELECT TOP 的语句。因此,我们的LastOrDefault 查询无法转换为 SQL。 这样做的可能方法是OrderByDescending 方法。

return View(db.tblMsgs.OrderByDescending(a => a.Id)
    .GroupBy(a => new  a.Sender, a.Receiver ).Select(x => x.OrderByDescending(y => y.SomeAttribute).FirstOrDefault())
    .Where(a => a.Receiver == username).ToList());

编辑:

您唯一应该选择的是要订购的列。如果它是一个自动递增的数字值,它可以是id字段,或者是行的添加日期(最好由服务器生成,否则会导致问题)。

【讨论】:

很高兴它正在工作。很高兴看到我们可以在世界各地互相帮助!如果您也能接受答案,我会更高兴。

以上是关于如何选择组中的最后一行的主要内容,如果未能解决你的问题,请参考以下文章

excel如何快速选择第一行到最后一行

如何从laravel中的数据库中选择最后一行[重复]

excel如何快速选择第一行到最后一行

excel表格中如何从第一行选到最后一行

选择每组中的最后一条记录

如何根据日期选择组中的单行?