2016-12-16 2 views
1

Ich habe den folgenden Code innerhalb einer Methode:Übergeben eines Parameters innerhalb Linq

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

In der letzten Zeile ich sonst in einem Parameter von irgendwo übergeben wollen, die

Mit anderen Worten

.AnotherRow ersetzen , etwas wie:

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

Irgendwelche Ideen? Ich erhalte einen Fehler, wenn ich das oben genannte versuche. Würde mich über jede Hilfe freuen.

Antwort

2

Sie können nicht etwas übergeben, das .AnotherRow darstellen würde, aber Sie können einen Funktor übergeben, der das gewünschte Attribut von Ihrem Objekt auswählt.

Nehmen wir an, table ist IEnumerable<MyClass>. Dann können Sie dies tun:

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

Jetzt können Sie diese Methode mit einem „Selektor“ nennen, die die Attribute bezeichnet werden aufaddiert, wie folgt:

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

Ich denke:

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

Methode Berechnen:

private double Calculate(double d1, double d2) 
    { 
     return d1 + d2; 
    } 
Verwandte Themen