zoukankan      html  css  js  c++  java
  • 传入指定字段名称就可以排序的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 

  • 相关阅读:
    这不是线性表
    定义线性表
    这不是线性表
    API函数的参数
    定义线性表
    [原创 js] 自定义页面功能
    YUI3 学习笔记(1) 
    YUI3学习笔记 ( 2 )
    含有变量的正则表达式使用方法
    YUI3学习笔记 ( 3 )
  • 原文地址:https://www.cnblogs.com/llcdbk/p/6349516.html
Copyright © 2011-2022 走看看