实体框架:order by和动态排序键

时间:2016-03-03 12:49:25

标签: vb.net entity-framework entity-framework-4

实体框架:order by和动态排序键

我有这个查询,它工作正常

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

但是我需要根据字段进行排序,类似这样的事情(sortField是一个带有列名称的字符串:id,name,description ...)

tmpList = db.Book.OrderBy(sortField)

有什么想法吗?

由于

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分: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