我有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.
}
答案 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;