【问题标题】:Entity framework: order by and dynamic sort key实体框架:排序依据和动态排序键
【发布时间】:2018-02-22 20:58:42
【问题描述】:

实体框架:排序依据和动态排序键

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

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

但我需要根据字段进行排序,类似这样(sortField 是一个字符串,其名称为:id、name、description...)

tmpList = db.Book.OrderBy(sortField)

有什么想法吗?

谢谢

【问题讨论】:

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


    【解决方案1】:
    【解决方案2】:

    这是一个按属性名称排序的扩展方法:

    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

    您可以在我的存储库中找到其他按属性名称排序的方法:

    • 按降序排列
    • 然后通过
    • 然后按降序
    • AddOrAppendOrderBy
    • AddOrAppendOrderByDescending

    【讨论】:

      猜你喜欢
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多