2016-07-27 3 views
-1

Я создал Func<int[], decimal>, который суммирует все элементы в массиве целых чисел: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>) 

Я попытался это, но я получаю сообщение об ошибке IntelliSense из лямбда-выражения, который говорит, что я не могу преобразовать тип bool ввести decimal:

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

кстати, что использование 'междунар [] tempResult = intArr.Where (я => filter.Contains (i)). ToArray(); 'this statement. – din

+0

извините, его не следует включать. я удалю, это затмевает вопрос. –

ответ

3

Оператор внутри суммы не выбирает, какие элементы в сумме собирать, он выбирает, какое поле на объекте суммируется. То, что вы на самом деле хотите это:

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

Вы можете цепь несколько методов расширения Linq по пути:

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

Это подводит все результаты, которые фильтруются функцией Where.

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

Если вы действительно настаиваете на лямбда вы можете перейти непосредственно Sum затем

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

Помощник Downvoter, чтобы объяснить? – Stilgar

Смежные вопросы