2016-03-25 5 views
0

Ich habe eine Liste, die Eigenschaften wie ID, Name, Alter enthält. Mit Linq, ich kann eine oder mehrere Eigenschaften mit auswählen. (X => x.Name, x.Age) und erhielt eine Enumeratble mit nur diesen Eigenschaften.mit Linq wählen Sie innerhalb Methode

Jetzt muss ich dies innerhalb einer Methode wählen. Ich versuchte, die func zu verwenden, aber Schwierigkeiten haben, um das Verfahren zu öffnen:

void myMethod<T,TSelection>(List<T> Persons, Func<T, TSelection> index) { 

var Index = list.Select(index); 
... 
    } 

Wie kann ich nun die Methode öffnen? Ich dachte, so etwas wie die:

myMethod(list,(list, t => t.Age)) 

Antwort

0

einfach das Lambda als zweites Argument übergeben:

myMethod(list, t => t.Age) 

Die Laufzeit Ihr Lambda in einen Delegaten kompatibel mit dem Func Parameter zwingen wird. Wenn der Compiler Ihre Typen nicht herausfinden kann, müssen Sie möglicherweise die Typen für Ihr Lambda angeben. Dies ist normalerweise nur dann ein Problem, wenn Sie einen generischen Typparameter als Rückgabetyp verwenden. In diesem Fall sollten Sie in Ordnung sein.

Wenn Sie mehrere Eigenschaften auswählen möchten, ohne eine neue Instanz des Originaltyps auszuwählen, wählen Sie ein neues anonymes Objekt aus (z. B. new { }). Sie können wählen Sie die Eigenschaften, die Sie interessieren innerhalb der Lambda:

myMethod(list, t => new { t.Age, t.Name }); 
+0

Vielen Dank, es funktioniert ohne "Liste, ..." Teil. Aber wie kann ich viele Eigenschaften auswählen? –

+0

Die Syntax, die Sie in Ihrem ursprünglichen Code anzeigen, ist nicht korrekt für die Auswahl mehrerer Eigenschaften. Ich glaube, was Sie suchen, ist ein anonymer Gegenstand. Ich habe die Antwort bearbeitet, um zu zeigen, wie Sie das ausdrücken würden. –