传入指定字段名称就可以排序的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写法的主要内容,如果未能解决你的问题,请参考以下文章