zoukankan      html  css  js  c++  java
  • EF-简化排序

    
    respository.GetPaged<S_Users>(out count, m => m.LoginName.Contains("a"),"LoginName asc,LoginNum desc", 1, 20);
    
            public IList<TEntity> GetPaged<TEntity>(out int total, Expression<Func<TEntity, bool>> filter = null, Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null, int index = 1, int size = 20) where TEntity : class
            {
                int skipCount = (index - 1) * size;
                var query = Get(filter, orderBy);
                total = query.Count();
                query = skipCount > 0 ? query.Skip(skipCount).Take(size) : query.Take(size);
                return query.ToList();
            }
    
            public IList<TEntity> GetPaged<TEntity>(out int total, Expression<Func<TEntity, bool>> filter = null, string orderBy = null, int index = 1, int size = 20) where TEntity : class
            {
                int skipCount = (index - 1) * size;
                var query = Get(filter, orderBy);
                total = query.Count();
                query = skipCount > 0 ? query.Skip(skipCount).Take(size) : query.Take(size);
                return query.ToList();
            }
    
    public static class QueryExtensions
        {
            public static IQueryable<T> OrderBy<T>(this IQueryable<T> source, string sortExpressions)
            {
                if (source == null)
                {
                    throw new ArgumentNullException("source");
                }
    
                string sortDirection = String.Empty;
                string propertyName = String.Empty;
    
                sortExpressions = sortExpressions.Trim();
    
                string[] sorts = sortExpressions.Split(',');
                for (int i = 0; i < sorts.Length; i++)
                {
                    string sortExpression = sorts[i];
                    int spaceIndex = sortExpression.Trim().IndexOf(" ");
                    if (spaceIndex < 0)
                    {
                        propertyName = sortExpression;
                        sortDirection = "ASC";
                    }
                    else
                    {
                        propertyName = sortExpression.Substring(0, spaceIndex);
                        sortDirection = sortExpression.Substring(spaceIndex + 1).Trim();
                    }
    
                    if (String.IsNullOrEmpty(propertyName))
                    {
                        return source;
                    }
    
                    ParameterExpression parameter = Expression.Parameter(source.ElementType, String.Empty);
                    MemberExpression property = Expression.Property(parameter, propertyName);
                    LambdaExpression lambda = Expression.Lambda(property, parameter);
    
                    string methodName = string.Empty;
                    if (i == 0)
                    {
                        methodName = (sortDirection.ToUpper() == "ASC") ? "OrderBy" : "OrderByDescending";
                    }
                    else
                    {
                        methodName = (sortDirection.ToUpper() == "ASC") ? "ThenBy" : "ThenByDescending";
                    }
    
                    Expression methodCallExpression = Expression.Call(typeof(Queryable), methodName,
                                                        new Type[] { source.ElementType, property.Type },
                                                        source.Expression, Expression.Quote(lambda));
    
                    source = source.Provider.CreateQuery<T>(methodCallExpression);
    
                }
                return source;
    
            }
        }
    
    
    
    
  • 相关阅读:
    NodeJS 难点(网络,文件)的 核心 stream 二:stream是什么
    NodeJS 难点(网络,文件)的 核心 stream 一:Buffer
    了解了这些才能开始发挥jQuery的威力
    一般公司的大体要求
    js 的垃圾回收器 原理 坑 优化-- 待续
    iframe 问题集合
    图片预加载 js css预加载
    各种插件
    Django REST framework快速入门指南
    Vue.js devtool插件安装后无法使用的解决办法
  • 原文地址:https://www.cnblogs.com/chenmfly/p/6363829.html
Copyright © 2011-2022 走看看