[c#]从列表中使用 LINQ 获取特定属性的具有最大值的对象

标签: Linq C#
发布时间: 2017/2/28 22:58:54
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有一个清单的 Beam 对象。每个 Beam 类有 XY 属性为坐标,它还具有 Height 属性。

现在这里是我最初的列表︰

List1 = {beam1, beam2, beam3, beam4}

beam1 = {X = 0, Y = 0, Height = 40}
beam2 = {X = 200, Y = 0, Height = 40}
beam3 = {X = 200, Y = 0, Height = 60}
beam4 = {X = 400, Y = 0, Height = 40}

正如你可以看到beam2beam3是在相同的点,我想在那里只有梁的最大值列表 Height 在每个不同的点。

所以最后名单使用 LINQ 将是︰

 List2 = {beam1, beam3, beam4}

解决方法 1:

您可以使用 GroupBy 进行分组并基于 XY 和从每个组中选择的项的最大高度︰

beams.GroupBy(b => new { b.X, b.Y })
 .Select(g => g.First(x => x.Heigth == g.Max(h => h.Height)))
 .ToList();

我会亲自使用 MaxBy 方法来获取最大的梁。高度︰

beams.GroupBy(b => new { b.X, b.Y })
 .Select(g => g.MaxBy(x => x.Heigth))
 .ToList();
官方微信
官方QQ群
31647020