2016-07-23 5 views
0

Я пытаюсь реализовать дерево выражений с помощью linq.I получает состояние ошибки, так как не может преобразовать выражение lambdaexpression в выражение. Пожалуйста, помогите, я проверил другое решение, но не мог помочь! Ниже мой кодНевозможно преобразовать из 'System.Linq.Expressions.LambdaExpression' в 'System.Linq.Expressionions.Expression

ParameterExpression pe = Expression.Parameter(typeof(Person), "p"); 
var expr = Expression.Lambda(Expression.Property(pe, sortByProp), pe);   
      var d= expr.Compile(); 
      IQueryable<Person> query = persons.AsQueryable(); 
      List<Person> sortedList = query.OrderBy<Person, int>(expr).ToList(); 
+0

Что такое свойство вы хотите сортировать? – user3185569

+0

Что вы хотите реализовать с помощью этого дерева выражений? –

+1

Заголовок сообщения вводит в заблуждение, потому что последняя часть ошибки - это не просто выражение «Expression», а выражение «Func >», которое отличается. Откуда вы знаете, тип 'sortByProp' ** ** является' int'? –

ответ

5

Похоже, вы пытаетесь реализовать OrderBy динамически с использованием деревьев выражений. Вы должны попробовать следующее:

public static IQueryable<T> OrderBy<T>(this IQueryable<T> source, string sortProperty, ListSortDirection sortOrder) 
{ 
    var type = typeof(T); 
    var property = type.GetProperty(sortProperty); 
    var parameter = Expression.Parameter(type, "p"); 
    var propertyAccess = Expression.MakeMemberAccess(parameter, property); 
    var orderByExp = Expression.Lambda(propertyAccess, parameter); 
    var typeArguments = new Type[] { type, property.PropertyType }; 
    var methodName = sortOrder == ListSortDirection.Ascending ? "OrderBy" : "OrderByDescending"; 
    var resultExp = Expression.Call(typeof(Queryable), methodName, typeArguments, source.Expression, Expression.Quote(orderByExp)); 
    return source.Provider.CreateQuery<T>(resultExp); 
} 

, а затем вы можете назвать его как:

collection.OrderBy("Property on which you want to sort", ListSortDirection.Ascending); 
+0

Спасибо, это сработало для меня! – Akhilesh

+0

Отлично. Хорошо, что это сработало. –

+0

Похоже, вы пытаетесь реализовать OrderBy динамически с использованием деревьев выражений. Вы хотите помочь? - Clippy – svick

 Смежные вопросы

  • Нет связанных вопросов^_^