2016-03-03 1 views
0

Entity Framework: order by et dynamique clé de tricadre Entité: commande par et trier dynamique clé

J'ai cette requête et il fonctionne très bien

tmpList = db.Book.OrderBy(Function(t) t.id) 

Mais je dois commander en fonction d'un champ, quelque chose comme ça (sortField est une chaîne avec le nom de la colonne: id, nom, description ...)

tmpList = db.Book.OrderBy(sortField) 

Toutes les idées?

Merci

Répondre

0

Voici une des méthodes d'extension pour trier par nom de la propriété:

public static IOrderedQueryable<TSource> OrderBy<TSource>(this IQueryable<TSource> source, string propertyName) 
{ 
    // LAMBDA: x => x.[PropertyName] 
    var parameter = Expression.Parameter(typeof(TSource), "x"); 
    Expression property = Expression.Property(parameter, propertyName); 
    var lambda = Expression.Lambda(property, parameter); 

    // REFLECTION: source.OrderBy(x => x.Property) 
    var orderByMethod = typeof(Queryable).GetMethods().First(x => x.Name == "OrderBy" && x.GetParameters().Length == 2); 
    var orderByGeneric = orderByMethod.MakeGenericMethod(typeof(TSource), property.Type); 
    var result = orderByGeneric.Invoke(null, new object[] { source, lambda }); 

    return (IOrderedQueryable<TSource>)result; 
} 

Responsabilité: Je suis le propriétaire du projet EntityFramework Plus.

Vous pouvez trouver d'autres méthodes pour commander par nom de la propriété dans mon dépôt:

  • OrderByDescending
  • ThenBy
  • ThenByDescending
  • AddOrAppendOrderBy
  • AddOrAppendOrderByDescending