如何选择组中的最后一行

时间:2016-12-08 05:36:10

标签: c# linq

我在每个组中获取最后一行时遇到问题。我正在使用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()我得到运行时异常。

1 个答案:

答案 0 :(得分:1)

这也是我现在遇到的问题。

经过一些研究后,我发现唯一有效的方法是反转你想要得到最后一项并获得第一项的清单。

背后的原因是SQL语言没有SELECT BOTTOMSELECT 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字段,如果它是一个自动递增的数字值,或行的添加日期(最好由服务器生成,否则可能导致问题)。