Verwandte Themen:
Erstellen Sie den Expression<Func<T, TKey>>
dynamisch
Ich habe im Internet gesucht, aber alle Beispiele erklären Expression<Func<
. Wie kann ich aus T
dynamisch einen Func<T, TKey>
erstellen?
Vielen Dank
Bearbeiten 1)
Der T
Typ in meinem Code bestimmt zur Laufzeit und zum Beispiel möchte ich meine Liste mit Name
sortieren. Nun, wie ich das erstellen kann: Func<T, TKey> = o=>o.Name;
Bearbeiten 2)
Bitte beachten Sie Folgendes:
public abstract class MyClass<T> where T : class
{
public virtual List<T> GetAll(Expression<Func<T, bool>> exp, string orderByProperty)
{
repository.Get(exp).OrderBy(?);
}
}
Das Problem besteht darin, eine Func<T, TKey>
für die Verwendung im OrderBy
Argument zu OrderBy
. Wie kann ich die Liste mit der Name
Eigenschaft sortieren?
Vielen Dank
Angesichts der Definition der abstrakten Klasse müssten Sie den Schlüssel als Teil der generischen Argumente einschließen, um ihn verwenden zu können.
Einfaches Beispiel für die Übergabe der Bestellung nach Funktion.
public abstract class MyClass<T, TKey> where T : class {
public virtual List<T> GetAll(
Expression<Func<T, bool>> exp,
Func<T, TKey> keySelector = null
) {
var query = repository.Get(exp);
if(orderBy != null) {
return query.OrderBy(keySelector).ToList();
return query.ToList();
}
}
Sie könnten dann eine abgeleitete Version der Klasse mit einem Standardschlüsseltyp haben
Im Folgenden wird beispielsweise eine string
, dies kann jedoch genauso gut eine int
, Guid
usw. sein.
public abstract class MyClass<T> : MyClass<T, string> where T : class {
}
Unter dem Strich müssen Sie jedoch die Reihenfolge nach Typ kennen, um sie verwenden zu können.
...GetAll(_ => _.SomeProperty == someValue, o => o.Name);