gpt4 book ai didi

c# - 无 Max() 适用 : Sequence contains no elements

转载 作者:太空宇宙 更新时间:2023-11-03 19:27:34 28 4
gpt4 key购买 nike

我有一个列表list,里面有这样的项目

ElementA: Number=1, Version=1
ElementB: Number=1, Version=2
ElementC: Number=1, Version=3 <-
ElementD: Number=2, Version=1
ElementE: Number=2, Version=2 <-
ElementF: Number=3, Version=1 <-

并且我想选择具有相同 Number 项的组中具有最高 Version 的所有项。 (见上面的箭头。)

我想对此使用查询,所以我试过这个:

var result = from a in list where a.Version >=
(from b in list where b.Number == a.Number && b != a select b.Version).Max() select a;

如果每组具有相同 Number 的项目至少包含 2 个元素,则此方法工作正常,但如果内部查询不包含任何元素,则抛出 InvalidOperationException。

如何重写查询以获得我想要的?我将不胜感激每一个提示。 :-)

最佳答案

这应该可以解决问题,但如果我自己不复制您的数据,我无法对其进行测试:

var result = 
list.GroupBy(x => x.Number)
.Select(gr =>
gr.OrderByDescending(x => x.Version)
.First());

正如 Henrik 所注意到的那样,这只会让你得到一个项目 - 我没有看到获得更多项目的原因,因为这些项目似乎只包含两个字段,但这很容易处理 - 只需为版本添加另一个组:

var result = 
list.GroupBy(x => x.Number)
.Select(gr =>
gr.GroupBy(x => x.Version)
.OrderByDescending(gr2 => gr2.Key)
.Select(gr => gr.ToArray()));

这应该会导致枚举具有最大版本的数组 - 但同样我无法测试,因此可能存在语法或语义错误,但缩进应该清晰并且易于删除错误。

关于c# - 无 Max() 适用 : Sequence contains no elements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7429726/

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