2016-07-27 54 views
-1

我創建了一個Func<int[], decimal>,總結所有元素的int數組:LINQ的兩步Func鍵一行拉姆達

Func<int[], decimal> testFunc1 = delegate(int[] intArr) 
{ 
    int[] filter = intArr.Where(i => i > 0).ToArray(); 
    decimal r = intArr.Where(i => filter.Contains(i)).Sum(); 
    return r; 
}; 

我怎樣才能凝結下來的東西,可以通過

消耗
Enumerable.Sum(TSource, Func<TSource, Decimal>) 

我想這一點,但我發現從lambda表達式,說我不能轉換類型bool鍵入一個智能感知錯誤decimal

decimal result2 = testInt.Sum(i => i > 0); 
+0

順便說一句,有什麼用INT的'[] tempResult = intArr.Where(I => filter.Contains (i))ToArray();'這個語句。 – din

+0

對不起,不應該包括在內。我會刪除,這是模糊的問題。 –

回答

3

sum中的語句不會選擇集合中的哪些元素進行求和,而是選擇該對象上的哪個字段進行求和。你真正想要的是:

decimal result2 = testInt.Where(i => i > 0).Sum() 
0

你可以將多個LINQ的擴展方法一路上:

decimal r = intArr.Where(i => i > 0).Sum(); 

這總結所有被何處功能篩選的結果。

0
testInt.Where(i => i > 0).Sum() 

如果你真的堅持一個lambda你可以通過直接總結,然後

testInt.Sum(i => i > 0 ? i : 0) 
+1

Downvoter謹慎解釋? – Stilgar