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?

Antworten auf die Frage(16)

Ihre Antwort auf die Frage