如何找到具有最大成员变量A的List元素,然后输出其成员变量B?

时间:2013-04-03 02:52:32

标签: c# linq max

我有100个元素的类对象列表。该类有两个成员变量,都是双打。我想按Class1.A升序排序,然后在此排序列表的指定子列表中排序(例如元素5到60),输出Class1.A for max Class1.B。

我理解这在LINQ中应该是非常可行的,但我在使用C#运行SQL查询之外对LINQ来说是一个新手,我还没有找到教程/ Q& A真的帮助我完成了这项工作。

非常感谢你。

public class Class1{
  public Double A;
  public Double B;

  public void CompareByA(Class1 C1, Class1 C2)
  { 
     return C1.A.CompareTo(C2.A);  
  }
}

public Double FindMaxAWithinSubset(List<Class1> L, int X, int Y)
{
  L.Sort(Class1.CompareByA);
  // Once L has been sorted by A, within the sublist of L with element         
  // indices between X and Y, find the element with maximum B, and output its A.
}

3 个答案:

答案 0 :(得分:1)

我更喜欢使用LINQ扩展,所以我会这样做。不确定看起来像SQL的linq表达式是什么。

Double maxAValueInSubSet = L.OrderBy(x => x.A).Skip(X).Take(Y-X).Max(x => x.B).Single().A;

答案 1 :(得分:1)

var result = myInstance.OrderBy(x => x.A).Skip(5).Take(55).Max(y => y.B).FirstOrDefault();

这样做的顺序是双A,跳过前5,接下来55,然后选择剩余B的最大值。

答案 2 :(得分:1)

您可以使用LINQ OrderBy,因此您无需使用Sort。属性A的第一个OrderBy,然后您可以使用Where选择索引从X到Y的项目。

然后你在属性B中OrderByDescending。这样就可以使最大值为B的项目位于列表顶部。您只需First即可获得结果。

   var result = list.OrderBy(x => x.A)
                    .Where((x, index) => index >= X && index <= Y)
                    .OrderByDescending(x => x.B)
                    .First().A;