gpt4 book ai didi

c# - Linq 分组依据和排序依据

转载 作者:行者123 更新时间:2023-11-30 14:48:58 26 4
gpt4 key购买 nike

我有一个 sql 查询,我按 Name 分组,然后按 Date 排序。我还需要为每个组选择一个具有最新日期的条目。我如何在 linq 中执行此操作(使用 lambda 表达式)?

select Name,Date,Comment 
from Feedback
Group by Name,Date,Comment
order by Date desc

我的林克

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();

如何按日期 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());

最佳答案

您的查询将是:

var query= from f in db.Feedback
group f by new {f.Name, f.Date, f.Comment} into g
orderby g.Key.Date descending
select new {g.Key.Name, g.Key.Date, g.Key.Comment};

还有:

var query= from f in db.Feedback
group f by new {f.Name, f.Date, f.Comment} into g
orderby g.Key.Date descending
select g.Key;

如果你想要第一个元素,使用FirstOrDefault扩展方法:

var first= query.FirstOrDefault();

如果您希望每个组的第一个元素按 Date 排序,那么您也可以这样做:

var query= from f in db.Feedback
group f by new {f.Name, f.Date, f.Comment} into g
select g.OrderByDescending(e=>e.Date).FirstOrDefault();

如果您只想按名称分组,请执行以下操作:

var query= from f in db.Feedback
group f by f.Name into g
select g.OrderByDescending(e=>e.Date).FirstOrDefault();

关于c# - Linq 分组依据和排序依据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39750726/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com