gpt4 book ai didi

linq - 在 LINQ Lambda 表达式中使用 GroupBy 和 Max

转载 作者:行者123 更新时间:2023-12-02 05:32:55 30 4
gpt4 key购买 nike

我有一个集合,例如:

**id1, id2, value**
1 9 12
2 9 6
3 11 8
4 11 87

我想使用 LINQ 并获得以下结果:

**value**
6
87

附注

id1 - select MAX;
id2 - group column;

我需要以下形式的答案

var result = list.GroupBy(x=>x.id2).select(s=>s.value);

希望得到您的帮助。

最佳答案

编辑:好的,现在我们有了一组稍微清晰的要求(尽管还远未写清楚),最简单的方法可能是:

var maxes = list.GroupBy(x => x.id2,
(key, xs) => xs.OrderByDescending(x => x.id1)
.First()
.value);

不幸的是,LINQ 没有提供一种简单的方法来获取“具有最大值的元素”(而不是最大值本身)。我在MoreLINQ中有一个方法它执行此操作,名为 MaxBy:

var maxes = list.GroupBy(x => x.id2,
(key, xs) => xs.MaxBy(x => x.id2).value);
<小时/>

原答案(按id2分组,取最大值)

我回答假设您实际上是想按 id2 而不是 id1 进行分组,并且您实际上想要 12 和 87 的结果而不是 6 和 87。在这种情况下,您需要:

var maxes = list.GroupBy(x => x.id2, (id, xs) => xs.Max(x => x.value));

或者(可能更容易理解):

var maxes = list.GroupBy(x => x.id2)
.Select(xs => xs.Max(x => x.value));

或者:

var maxes = list.GroupBy(x => x.id2, x => x.value)
.Select(values => values.Max());

或者:

var maxes = list.GroupBy(x => x.id2,     // Key selector
x => x.value, // Element selector
(key, values) => values.Max()); // Result selector

或者甚至:

var maxes = list.GroupBy(x => x.id2)
.Select(xs => xs.Select(x => x.value).Max());

如您所见,GroupBy有很多重载:)

或者您可以使用查询表达式:

var maxes = from x in list
group x.value by x.id2 into values
select values.Max();

您不应该将自己限制在查询表达式或扩展方法版本中,理解这两者很重要,这样您就可以使用最合适的。

关于linq - 在 LINQ Lambda 表达式中使用 GroupBy 和 Max,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15866087/

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