我有一个 SQL 查询,其中按 Name
进行分组,然后按 Date
排序。
我还需要选择每个组中最新日期的一条记录。
如何使用 LINQ(使用 Lambda 表达式)实现?
select Name,Date,Comment
from Feedback
Group by Name,Date,Comment
order by Date desc
我的 Linq
var query= db.Feedback
.GroupBy(f => f.Name, (f, g) => new
{
Name = f,
Comment = g.Select(h => h.Comment),
Date= g.Select(h => h.Date)
})
.Select(f => new { f.Name, f.Date, f.Comment}).ToList();
如何按照每个组的
Date
降序排序并获取第一个条目?
编辑
我已更新我的查询为 var query= db.Feedback.GroupBy(f => new { f.Name, f.Comment })
.Select(a => a.AsEnumerable())
.Select(b => b.OrderByDescending(f => f.Date)
.Select(c=>new{c.Name,c.Date,c.Comment}));
...并且执行最后一次选择可以防止JsonSerializer出现引用循环错误。
我的数据应该长成这样:
姓名:Name1 日期:9月28日 评论:评论文本
姓名:Name2 日期:8月15日 评论:评论文本
...但它看起来像这样:
姓名:Name1 日期:9月28日 评论:评论文本
姓名:Name2 日期:8月15日 评论:评论文本
姓名:Name1 日期:8月1日 评论:评论文本
...这里是解决方案:
var query= db.Feedback
.GroupBy(f => new { f.Name})
.Select(a => a.AsEnumerable())
.Select(b => b.OrderByDescending(f => f.Date)
.Select(c => new { c.Name, c.Date, c.Comment})
.FirstOrDefault());