using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text; namespace Common
{
public class QueryParameters
{
public QueryParameters(); public string order { get; set; }
public int page { get; set; }
public int rows { get; set; }
public string sort { get; set; }
} public class DataGrid<T>
{
/// <summary>
/// 默认构造函数
/// </summary>
public DataGrid() { } /// <summary>
/// 构造函数
/// </summary>
/// <param name="rows">表格数据</param>
public DataGrid(List<T> rows)
{
this.rows = rows;
}
private List<T> _rows = new List<T>(); /// <summary>
/// 表格数据
/// </summary>
public List<T> rows
{
get { return _rows; }
set
{
if (value != null)
{
_rows = value;
}
}
} /// <summary>
/// 总记录数
/// </summary>
public int total { get; set; } public static DataGrid<T> QueryWithParameters(IEnumerable<T> queryable, QueryParameters queryParameters)
{
if (queryable == null)
{
return new DataGrid<T>();
}
queryParameters = queryParameters ?? new QueryParameters();
IQueryable<T> source = Queryable.AsQueryable<T>(queryable); var page = queryParameters.page;
var rows = queryParameters.rows;
var sort = queryParameters.sort;
var order = queryParameters.order; int num = source.Count(); int count = (page - ) * rows; IQueryable<T> 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<T>)source.Provider.CreateQuery(Expression.Call(typeof(Queryable), "OrderBy", new Type[] { source.ElementType, selector.Body.Type }, source.Expression, selector));
}
else if (order.ToLower() == "desc")
{
s = (IQueryable<T>)source.Provider.CreateQuery(Expression.Call(typeof(Queryable), "OrderByDescending", new Type[] { source.ElementType, selector.Body.Type }, source.Expression, selector));
}
} //方法1
s = count == ? s.Take(rows) : s.Skip(count).Take(rows);
//方法2
s = count == ? Queryable.Take<T>(s, rows) : Queryable.Take<T>(Queryable.Skip<T>(s, count), rows); return new DataGrid<T>()
{
total = num,
rows = s.ToList()
};
}
}
}

调用:

DataGrid<T>.QueryWithParameters(query, paging)

最新文章

  1. memcached安装及.NET中的Memcached.ClientLibrary使用详解
  2. Android事件分发机制浅谈(二)--源码分析(ViewGroup篇)
  3. Linux系统下输出某进程内存占用信息的c程序实现
  4. IIS使用Tip
  5. 站长、运维必备| 网站可用性监控产品 OneAPM Cloud Test 上线
  6. CPU/寄存器/内存
  7. [ReactJS] DOM Event Listeners in a React Component
  8. 轻量级IOC框架Guice
  9. Elasticsearch 快照和恢复
  10. Spring基础系列--AOP织入逻辑跟踪
  11. CodeForces - 833B The Bakery
  12. ToastUtils 工具类
  13. Entity Framework 问题集锦
  14. IDEA spirng boot @Autowired注解 mapper出现红色下划线解决方法
  15. R语言scale与unscale函数
  16. Spock集成入门
  17. Mac - MySQL初始密码忘记重置MySQL root密码
  18. CentOS7.5安装Tomcat8
  19. 一、vue:如何新建一个vue项目
  20. 分析java进程假死状况

热门文章

  1. linux压缩包安装jdk
  2. CentOS 7 配置 http 服务器
  3. 10个C语言经典
  4. URL中#符号的作用
  5. 发现fork容易出错的一个地方
  6. 功防技术与实践第1.2章,kali初步了解
  7. Centos7安装lnmp环境
  8. Pillow的安装和使用
  9. PHP现阶段发现的不足点
  10. rowid去重(转)