gpt4 book ai didi

c# - 使用 LINQ 对项目进行分组并从每个组中选择特定项目

转载 作者:太空狗 更新时间:2023-10-29 23:10:53 24 4
gpt4 key购买 nike

必须有一条直线可以做到这一点,但我找不到它。

给出这个查询:

from x in new XPQuery<XPContent>(s)
select new { x.Category, x.ContentType, x.Name, x.ContentID, x.Date }

我需要为每个不同的 ContentID 选择日期最长的记录。这可以用 LINQ 巧妙地完成吗?现在我正在这样做:

var q = (from x in new XPQuery<XPContent>(s)
select new { x.Category, x.ContentType, x.Name, x.ContentID, x.Date }).ToList();

var r = q.ToLookup(item => item.ContentID);
foreach (var rItem in r) {
var s = rItem.OrderByDescending(a => a.Date).First();
/* do stuff with s */
}

...但是 ToLookup 感觉有点笨拙。还是我有最好(最简单)的解决方案?

此外,我知道我不应该使用 ToList,但请暂时忽略它。

提前致谢!

最佳答案

我想你想要:

var q = from x in new XPQuery<XPContent>(s)
group x by x.ContentID into g
let latest = g.OrderByDescending(a => a.Date).First()
select new
{
latest.Category, latest.ContentType,
latest.Name, latest.ContentID, latest.Date
};

(请注意,从一个组中查找“最大”元素的方法比首先对其进行排序更高效,例如使用 MaxBy 运算符。)

查询非常简单;它只是按项目的 ContentId 对项目进行分组,然后从每个组中选择一个匿名类型的实例,该实例是从该组的最新项目中生成的。

关于c# - 使用 LINQ 对项目进行分组并从每个组中选择特定项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5013195/

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