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

时间:2014-11-06 08:57:19

标签: c# linq

我有一个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}

正如您所看到的那样, beam2 beam3 位于同一点,我想要一个列表,其中每个梁只有一个最大Height的梁不同点。

所以使用LINQ的最终列表将是:

 List2 = {beam1, beam3, beam4}

2 个答案:

答案 0 :(得分:3)

您可以使用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();

答案 1 :(得分:2)

试试这个: -

var query = List1.GroupBy(x => new { x.X, x.Y }).Select(x => x.First(y => y.Height == x.Max(z => z.Height)));