2016-07-23 18 views
0

konvertieren Ich versuche, Ausdrucksbaum mit Linq zu implementieren. Ich erhalte Fehlerstatus, wie Lambdaexpression in Ausdruck nicht konvertieren kann. Bitte helfen Sie mir, andere Lösung überprüft, aber konnte nicht so viel helfen! Unten ist mein CodeKonnte nicht von "System.Linq.Expressions.LambdaExpression" zu "System.Linq.Expressions.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

Was die Eigenschaft, die Sie sortieren möchten ist? – user3185569

+0

Was möchten Sie mit diesem Ausdrucksbaum implementieren? –

+1

Der Beitrag Titel ist irreführend, weil der letzte Teil des Fehlers nicht nur Ausdruck ist, sondern Ausdruck > ', was anders ist. Woher weißt du, dass der Typ "sortByProp" ** "int" ist? –

Antwort

5

Es scheint, als ob Sie versuchen, OrderBy dynamisch mit Ausdrucksbaumstrukturen zu implementieren. Sie sollten versuchen, die folgenden:

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); 
} 

und dann können Sie es als nennen:

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

Danke, es hat bei mir funktioniert! – Akhilesh

+0

Großartig. Es ist gut, dass es funktioniert hat. –

+0

Es scheint, dass Sie versuchen, OrderBy dynamisch mithilfe von Ausdrucksbaumstrukturen zu implementieren. Möchten Sie Hilfe? - Clippy – svick