我有以下類結構:
public class FirstClass
{
public string EmployeeNo { get; set; }
public List<SecondClass> SecondClass { get; set; }
}
public class SecondClass
{
public int Count { get; set; }
}
我正在使用這段代碼:
var result = FirstClass.Where(fc => fc.SecondClass.Aggregate((item1, item2) => item1.Count > item2.Count ? item1 : item2));
但是,它會導致此編譯器錯誤:
無法將“SecondClass”的型別隱式轉換為 bool
如何獲取FirstClass包含SecondClass具有最高SecondClass.Count屬性值的物件的物件?如果多個FirstClass物件具有相同的最高值,它應該回傳第一個這樣的物件。
uj5u.com熱心網友回復:
您可以選擇 SecondClass 中每個專案的計數并用于Max查找最大值。然后在 FirstClass 中選擇每個專案的這個值并Max再次使用:
int highestCount = input.Select(x => x.SecondClass.Select(y => y.Count).Max()).Max();
如果要查找計數最高的專案,可以將第一個 Select 替換為 OrderByDescending,將第二個 Max 替換為 FirstOrDefault:
var itemWithHighestCount = input.OrderByDescending(x => x.SecondClass.Select(y => y.Count).Max()).FirstOrDefault();
在線演示:https ://dotnetfiddle.net/0rWARC
uj5u.com熱心網友回復:
SecondClass.Count獲取給定FirstClass實體的最大值很簡單......
int maxSecondClassCount = first.SecondClass.Max(second => second.Count);
...雖然請注意Max()willthrow一個InvalidOperationExceptioniffirst.SecondClass是空的。然后你可以使用...
- .... NET 6獲取具有該最大值的實體的
MaxBy()方法...FirstClassSecondClass.Count
MoreLINQ庫還提供了一種FirstClass firstClassWithMaxSecondClassCount = firstClassCollection.MaxBy(first => first.SecondClass.Max(second => second.Count));MaxBy擴展方法。 - ...所有支持 LINQ 的 .NET (Framework/Core) 版本的方法來列舉您的實體,
Aggregate()跟蹤具有最大值的實體,并在最后回傳該實體...FirstClassSecondClass.CountFirstClass
它使用一個元組FirstClass firstClassWithMaxSecondClassCount = firstClassCollection.Aggregate( (element: default(FirstClass), count: 0), // The initial value of currentMax (currentMax, currentElement) => { int currentElementMaxCount = currentElement.SecondClass.Max(second => second.Count); return currentElementMaxCount > currentMax.count ? (element: currentElement, count: currentElementMaxCount) : currentMax; }, currentMax => currentMax.element // The return value given the final value of currentMax );SecondClass.Count來存盤包含實體旁邊的最大值,FirstClass這樣就不必在每次呼叫中重新計算值。否則,可以使用這種不太復雜但性能較低的代碼......
使用FirstClass firstClassWithMaxSecondClassCount = firstClassCollection.Aggregate( (maxElement, currentElement) => currentElement.SecondClass.Max(second => second.Count) > maxElement.SecondClass.Max(second => second.Count) ? currentElement : maxElement );Aggregate()而不是排序并在結果的一端獲取元素的優點是Aggregate()只需要存盤另一個值 - 累加器(上面的currentMax/maxElement) - 因為它列舉源序列,而排序將需要將整個序列緩沖到那個觀點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/437623.html
