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()
};
}
}
}