Entity Framework 多欄位排序

來源:互聯網
上載者:User

 

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, descvar result = queryWithOrderBy.ToList(); 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.