zoukankan      html  css  js  c++  java
  • Entity Framework 多字段排序

    public interface IOrderByExpression<TEntity> where TEntity : class
    {
        IOrderedQueryable<TEntity> ApplyOrderBy(IQueryable<TEntity> query);
        IOrderedQueryable<TEntity> ApplyThenBy(IOrderedQueryable<TEntity> query);
    }
    public class OrderByExpression<TEntity, TOrderBy> : IOrderByExpression<TEntity>
        where TEntity : class
    {
        private Expression<Func<TEntity, TOrderBy>> _expression;
        private bool _descending;
    
        public OrderByExpression(Expression<Func<TEntity, TOrderBy>> expression,
            bool descending = false)
        {
            _expression = expression;
            _descending = descending;
        }
    
        public IOrderedQueryable<TEntity> ApplyOrderBy(
            IQueryable<TEntity> query)
        {
            if (_descending)
                return query.OrderByDescending(_expression);
            else
                return query.OrderBy(_expression);
        }
    
        public IOrderedQueryable<TEntity> ApplyThenBy(
            IOrderedQueryable<TEntity> query)
        {
            if (_descending)
                return query.ThenByDescending(_expression);
            else
                return query.ThenBy(_expression);
        }
    }
    public IQueryable<TEntity> ApplyOrderBy<TEntity>(IQueryable<TEntity> query,
        params IOrderByExpression<TEntity>[] orderByExpressions)
        where TEntity : class
    {
        if (orderByExpressions == null)
            return query;
    
        IOrderedQueryable<TEntity> output = null;
    
        foreach (var orderByExpression in orderByExpressions)
        {
            if (output == null)
                output = orderByExpression.ApplyOrderBy(query);
            else
                output = orderByExpression.ApplyThenBy(output);
        }
    
        return output ?? query;
    }
    var query = context.Users ... ;
    
    var queryWithOrderBy = ApplyOrderBy(query,
        new OrderByExpression<User, string>(u => u.UserName),    // a string, asc
        new OrderByExpression<User, int>(u => u.UserId, true));  // an int, desc
    
    var result = queryWithOrderBy.ToList(); 
  • 相关阅读:
    phalapi框架where条件查询
    yii2学习网站
    改变yii2 $form最外层div样式
    PHP库(数据抓取)
    yii框架场景的用法
    Yii框架数据查询
    更改控制台编码格式
    打开yii2控制台命令
    过滤器实现登录拦截
    SSM整合
  • 原文地址:https://www.cnblogs.com/hun_dan/p/2735255.html
Copyright © 2011-2022 走看看