【发布时间】:2017-02-06 14:58:30
【问题描述】:
我有一个 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 desc 对每个组进行排序并取第一个条目?
编辑
我已将查询更新为
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}));
...执行最后一个 Select 可防止 JsonSerializer 中出现引用循环错误。
我的数据应该是这样的
姓名:姓名1 日期:9月28日 评论:评论文字
名称:名称2 日期:8 月 15 日 评论:评论文字
...但看起来是这样的:
姓名:姓名1 日期:9月28日 评论:评论文字
名称:名称2 日期:8 月 15 日 评论:评论文字
姓名:姓名1 日期: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());
【问题讨论】:
-
你想要每个组的第一个元素吗?
-
是的,按最新日期。
标签: c# sql linq linq-to-entities