java lamda 分页_Lambda动态排序分页通用方法

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Linq.Expressions;usingSystem.Text;namespaceCommon

{public classQueryParameters

{publicQueryParameters();public string order { get; set; }public int page { get; set; }public int rows { get; set; }public string sort { get; set; }

}public class DataGrid{///

///默认构造函数///

publicDataGrid() { }///

///构造函数///

/// 表格数据

public DataGrid(Listrows)

{this.rows =rows;

}private List _rows = new List();///

///表格数据///

public Listrows

{get { return_rows; }set{if (value != null)

{

_rows=value;

}

}

}///

///总记录数///

public int total { get; set; }public static DataGrid QueryWithParameters(IEnumerablequeryable, QueryParameters queryParameters)

{if (queryable == null)

{return new DataGrid();

}

queryParameters= queryParameters ?? newQueryParameters();

IQueryable source = Queryable.AsQueryable(queryable);var page =queryParameters.page;var rows =queryParameters.rows;var sort =queryParameters.sort;var order =queryParameters.order;int num = source.Count();

int count = (page - 1) *rows;

IQueryable s =source;if (!string.IsNullOrWhiteSpace(sort))

{var sortExpression =Expression.Parameter(source.ElementType);var selector =Expression.Lambda(Expression.PropertyOrField(sortExpression, sort), sortExpression);if (order.ToLower() == "asc")

{

s= (IQueryable)source.Provider.CreateQuery(Expression.Call(typeof(Queryable), "OrderBy", newType[] { source.ElementType, selector.Body.Type }, source.Expression, selector));

}else if (order.ToLower() == "desc")

{

s= (IQueryable)source.Provider.CreateQuery(Expression.Call(typeof(Queryable), "OrderByDescending", newType[] { source.ElementType, selector.Body.Type }, source.Expression, selector));

}

}//方法1

s = count == 0 ?s.Take(rows) : s.Skip(count).Take(rows);//方法2

s = count == 0 ? Queryable.Take(s, rows) : Queryable.Take(Queryable.Skip(s, count), rows);return new DataGrid()

{

total=num,

rows=s.ToList()

};

}

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值