2016-12-16 4 views
1

У меня есть следующий код в методе:Передача параметра в Linq

someData = table.AsEnumerable() 
    .Where(row => row.someRow.Equals("Something")) 
    .Sum(row => row.AnotherRow); 

На последней строке я хочу передать в качестве параметра из другого, который заменит .AnotherRow

Другими словами , что-то вроде:

.Sum(row => row. + myParameter); 

Любые идеи? Я получаю сообщение об ошибке, когда я пытаюсь сделать это. Поблагодарили бы за любую помощь.

ответ

2

Вы не можете передать что-то, что представляло бы .AnotherRow, но вы можете передать функтор, который выбирает желаемый атрибут из вашего объекта.

Скажем, table является IEnumerable<MyClass>. Тогда вы можете сделать это:

int SumSelected(Func<MyClass,int> attrSelector) { 
    return table.AsEnumerable() 
     .Where(row => row.someRow.Equals("Something")) 
     .Sum(row => attrSelector(AnotherRow)); 
} 

Теперь вы можете вызвать этот метод с «селектор», обозначающее атрибуты, которые будут добавлены вверх, следующим образом:

var totalCustomers = SumSelected(obj => obj.CustomerCount); 
var totalStores = SumSelected(obj => obj.StoreCount); 
0

Я думаю:

someData = table.AsEnumerable() 
    .Where(row => row.someRow.Equals("Something")) 
g.Sum(row => Calculate(row => row.AnotherRow, row1 =>row1.AnotherRow)); 

Метод расчета:

private double Calculate(double d1, double d2) 
    { 
     return d1 + d2; 
    } 
Смежные вопросы