/// <summary> /// 分页查询方法扩展二 /// </summary> /// <param name="query">IQueryable对象</param> /// <param name="index">索引,最小值为1</param> /// <param name="pageSize">分页大小</param> /// <param name="wheres">过滤表达式</param> /// <param name="funOrderby">排序表达式,支持多重排序,此表达式使用,扩展的方式进行</param> /// <param name="selector">选择表达式</param> /// <typeparam name="TEntity">业务实体类型</typeparam> /// <typeparam name="TResult">结果集类型</typeparam> /// <returns>返回分页数据</returns> /// <exception cref="ArgumentNullException">当选择条件selector为null时,抛出此异常</exception> public static PageInfo <TResult> Query <TEntity, TResult>(this IQueryable <TEntity> query, int index, int pageSize, List <Expression <Func <TEntity, bool> > > wheres, Func <IQueryable <TEntity>, IQueryable <TEntity> > funOrderby, Func <IQueryable <TEntity>, List <TResult> > selector) { if (selector == null) { throw new ArgumentNullException("selector"); } if (funOrderby == null) { throw new ArgumentNullException("funOrderby"); } PageInfo.CheckPageIndexAndSize(ref index, ref pageSize); IQueryable <TEntity> queryable = query; if (wheres != null) { wheres.ForEach(p => { if (p != null) { queryable = queryable.Where(p); } }); } int count = queryable.Count(); PageInfo.CheckPageIndexAndSize(ref index, pageSize, count); if (count > 0) { queryable = funOrderby(queryable); if (index != 1) { queryable = queryable.Skip((index - 1) * pageSize); } queryable = queryable.Take(pageSize); return(new PageInfo <TResult>(index, pageSize, count, selector(queryable))); } return(new PageInfo <TResult>(index, pageSize, count, new List <TResult>())); }