Vorbei an einem lambda-Ausdruck als parameter an eine Methode?
Scheint es, wie es sein würde, eine Allgemeine Anforderung, aber ich finde keine Lösung für dieses irgendwo.
Habe ich eine Methode, die OrderBy
eine Sammlung je ein parameter übergeben werden.
Ich würde gerne weitergeben, den Inhalt einer 'OrderBy' um die Methode, aber kann nicht herausfinden, wie es zu tun.
, Was ich Versucht habe
Habe ich versucht, ein Schalter mit einem string (z.B., wenn Sie pass 'Name' werde es trifft den case
welche Aufträge es durch den Namen), aber das fühlt sich "hacky" und unnötige.
Ich weiß, dass es so etwas wie Func<TEntity, TResult>
, aber ich kann es nicht ganz knacken.
PSEUDO-CODE:
GetOrderedCollection([NOT SURE] orderBy)
{
return collection.OrderBy(orderBy);
}
- Warum nicht Sie betrachten die parameter OrderBy tatsächlich braucht und verwenden die gleichen parameter geben Sie für Ihre Methode?
Du musst angemeldet sein, um einen Kommentar abzugeben.
OrderBy ist eine Erweiterungsmethode mit der folgenden Signatur:
(Quelle: https://msdn.microsoft.com/it-it/library/bb534966%28v=vs.110%29.aspx )
also Ihre Methode braucht eine Funktion als argument, wo TSource ist die Liste Typ, und TKey ist der zurückgegebene Typ von deiner lambda.
Ein Beispiel wäre:
EDIT:
Mir ist auch aufgefallen, dass in deinem Beispiel-code, den Sie erklärt Ihre Methode als void, bu, dann Sie versuchen, um return ein IOrderedEnumerable.
Wenn Sie möchten, um die geordnete Sammlung zurück, Ihre Methode muss mindestens eine IEnumerable-Typ (aber das würde Niederlage der Zweck der Bestellung es, als IEnumerables nicht garantieren die Ordnung. Eine wahrscheinlichere Umsetzung wäre, um wieder eine
List<TSource>
- und call -list.OrderBy(func).ToList()
In seiner allgemeinsten form, Ihre Methode müsste so Aussehen:
T1
wobei der Typ der Elemente in der Liste undT2
wobei der Typ der EigenschaftT1
, die Sie bestellen möchten, auf.Tut dies, Ihren Anforderungen gerecht zu werden?
Ja, Sie sind auf der Suche für ein
Func<TEntity, TResult> orderingFunc
. Das wichtigste ist, dass der Ausgang (dieTResult
) ist einIComparable
so, dass dieOrderBy
- Funktion kann richtig Sortieren Sie Ihre Ergebnisse.So etwas wie dies funktioniert:
Könnte man dies nennen, mit lambda-Funktionen, wie die normalen:
Ein .NETTO-Fiddle Demonstration dieser Idee
Der parameter muss entweder ein
Func
oder eineAction
. Siehe Antwort zu diese Frage für weitere Informationen.