我正在使用 c# .NET 4.8。我有一個物件陣列。物件具有屬性,只有當另一個屬性不為空時,我才想獲得所有屬性之一的總和。
因此,如果我在陣列中有這 3 個物件:
myObject[] objectArray = [
new myObject{ a = 1, b = 2 },
new myObject{ a = 3 },
new myObject{ a = 4, b = 5 }
];
我只想在不為空的情況下求和myObject.a,myObject.b在這種情況下為 5(來自 1objectArray[0].a和來自 4 objectArray[2].a)。
我正在嘗試使用 linq 來完成此操作,但在弄清楚它的語法時遇到了問題。
我試過這個:
objectArray.Select(x => x.a).Where(x.b != null).Sum();
但試圖x.b在我的Where陳述中參考給我以下錯誤:
無法決議符號“x”
我被困在如何格式化這個 linq 查詢以獲得我需要的值。如果有人可以就如何完成我在這個問題中概述的內容給我一些指導,我將不勝感激。正確、解釋清楚的答案將被標記為已接受和贊成。謝謝。
uj5u.com熱心網友回復:
您忘記了 Where 運算式接收列舉序列中的當前項。所以它應該是Where(x => xb != null)但你還需要告訴 Sum 運算式你想要求和的內容。根本不需要 Select 部分。
因此,假設b是可空型別(IE int? b {get;set;}),那么您可以通過簡單的方式獲得b為空的 a的總和
var result = objectArray.Where(x => x.b != null).Sum(k => k.a);
如果b不是可空型別(即int b {get;set;}),那么當您不給它一個值時,它具有整數的默認值(零),因此可以在沒有任何地方的情況下完成總和
var result = objectArray.Sum(k => k.a);
uj5u.com熱心網友回復:
我認為您要做的就是先過濾然后添加。例子:
public class O
{
public int A { get; set; }
public int? B { get; set; }
}
var initList = new List<O>
{
new O {A= 1, B = 2},
new O {A= 2},
new O {A= 3, B = 2},
};
var sum = initList.Where(item => item.B != null).Sum(item => item.A);
uj5u.com熱心網友回復:
無論如何,我這樣做的方式是這樣的:
var sum = objectArray.Where(x => x.b != null).Sum(x => x.a);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/427891.html
