2016-03-03 54 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