Wie wende ich OrderBy auf ein IQueryable an, indem ich einen Zeichenfolgenspaltennamen in einer generischen Erweiterungsmethode verwende?
public static IQueryable<TResult> ApplySortFilter<T, TResult>(this IQueryable<T> query, string columnName)
where T : EntityObject
{
var param = Expression.Parameter(typeof(T), "o");
var body = Expression.PropertyOrField(param,columnName);
var sortExpression = Expression.Lambda(body, param);
return query.OrderBy(sortExpression);
}
Da der Typ für OrderBy nicht von sortExpression abgeleitet wird, muss er zur Laufzeit wie folgt angegeben werden:
var sortExpression = Expression.Lambda<T, TSortColumn>(body, param);
Ode
return query.OrderBy<T, TSortColumn>(sortExpression);
Ich glaube nicht, dass dies möglich ist, da TSortColumn nur zur Laufzeit ermittelt werden kann.
Gibt es einen Weg, dies zu umgehen?