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 
  • 相关阅读:
    jquery $.ajax $.get $.post的区别
    浅析JQuery中的html(),text(),val()区别
    单词统计续
    第一阶段意见评论
    学习进度9
    第一阶段SCRUM冲刺10
    第一阶段SCRUM冲刺09
    单词统计
    第一阶段SCRUM冲刺08
    学习进度8
  • 原文地址:https://www.cnblogs.com/nimorl/p/12986343.html
Copyright © 2011-2022 走看看