Entity Framework 4、5 多字段排序

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 static class IQueryableHelper
{
        /// <summary>
        /// IQueryable 接口的多字段排序 请在执行底层时使用
        /// </summary>
        /// <typeparam name="TEntity">目标类型</typeparam>
        /// <param name="query"></param>
        /// <param name="orderByExpressions"></param>
        /// <returns></returns>
        public static IQueryable<TEntity> ApplyOrderBy<TEntity>(this 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;
        }
}

调用处

 using (var db = ConnectionHelper.GetConn())
            {
                var list = db.tb_Store.ApplyOrderBy(new OrderByExpression<tb_Store, string>(u => u.StorePhone),
                      new OrderByExpression<tb_Store, string>(u => u.StoreCode, true)
                      ).Skip(skip).Take(take);//用自己写的扩展方法代替原来的orderby 
                var xx = ((ObjectQuery)list).ToTraceString(); //这里可以看一下生成的sql语句 
            }

 

转载于:https://www.cnblogs.com/xingbo/p/4377909.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值