m => m.GetType().GetProperty(sortDataField).GetValue(m, null)
Не является допустимым выражением для OrderBy
, в этом случае его можно преобразовать в действительное SQL для EF для выполнения
. Вам потребуется использовать sortDataField
для построения выражения динамически для использования с OrderBy
вызовами.
Следующее сделано в качестве метода расширения для удобства
public static Expression<Func<TModel, object>> GetPropertyExpression<TModel>(this IEnumerable<TModel> model, string propertyName) {
// Manually build the expression tree for
// the lambda expression m => m.PropertyName.
// (TModel m) =>
var parameter = Expression.Parameter(typeof(TModel), "m");
// (TModel m) => m.PropertyName
var property = Expression.PropertyOrField(parameter, propertyName);
// (TModel m) => (object) m.PropertyName
var cast = Expression.Convert(property, typeof(object));
var expression = Expression.Lambda<Func<TModel, object>>(cast, parameter);
return expression;
}
Он создает дерево выражений для сортировки, которое затем может использоваться как
if (sortDataField != null) {
//m => m.sortDataField
var keySelector = Mut.GetPropertyExpression(sortDataField);
if (sortOrder == "asc") {
Mut = Mut.OrderBy(keySelector);
} else {
Mut = Mut.OrderByDescending(keySelector);
}
}
для заказа запроса