2016-03-03 86 views
0

實體框架:爲了通過動態排序鍵實體框架:爲了通過動態排序鍵

我有這個疑問,它工作正常

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

但我需要根據現場訂購,像這樣的東西(sortField是一個字符串名稱的列:id,名稱,描述...)

tmpList = db.Book.OrderBy(sortField) 

任何想法?

謝謝

回答

0

這裏是一個擴展方法,按屬性名稱進行排序:

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

免責聲明:我的項目EntityFramework Plus的所有者。

你可以找到其他方法,通過屬性名在我的倉庫訂購:

  • OrderByDescending
  • ThenBy
  • ThenByDescending
  • AddOrAppendOrderBy
  • AddOrAppendOrderByDescending