传入指定字段名称就可以排序的EF写法

Posted 洛阳之晨,譬如临安初雨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了传入指定字段名称就可以排序的EF写法相关的知识,希望对你有一定的参考价值。

   private static IQueryable<T> SetQueryableOrder<T>(this IQueryable<T> query, string sort, string order)
        {
            if (string.IsNullOrEmpty(sort))
                throw new Exception("必须指定排序字段!");

            PropertyInfo sortProperty = typeof(T).GetProperty(sort, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
            if (sortProperty == null)
                throw new Exception("查询对象中不存在排序字段" + sort + "");

            ParameterExpression param = Expression.Parameter(typeof(T), "t");
            Expression body = param;
            if (Nullable.GetUnderlyingType(body.Type) != null)
                body = Expression.Property(body, "Value");
            body = Expression.MakeMemberAccess(body, sortProperty);
            LambdaExpression keySelectorLambda = Expression.Lambda(body, param);

            if (string.IsNullOrEmpty(order))
                order = "ASC";
            string queryMethod = order.ToUpper() == "DESC" ? "OrderByDescending" : "OrderBy";
            query = query.Provider.CreateQuery<T>(Expression.Call(typeof(Queryable), queryMethod,
                                                               new Type[] { typeof(T), body.Type },
                                                               query.Expression,
                                                               Expression.Quote(keySelectorLambda)));
            return query;
        }

科普:扩展方法。必须是静态的而且开头的第一个参数是某种类型前面加入this 

以上是关于传入指定字段名称就可以排序的EF写法的主要内容,如果未能解决你的问题,请参考以下文章

mvc+ef6多字段排序表达式怎么写

javaList指定多字段排序-内存排序

EF5.X Code First表关联与延迟加载

Linq使用多字段分组、排序

关于启动活动的最佳写法

SQLserver排序问题,字段中含有字母、数字、汉字,如何只按数字排序