/// <summary> ///获取分页数据 /// </summary> /// <param name="pageIndex">页码</param> /// <param name="pageCount">页大小</param> /// <param name="specification">条件</param> /// <param name="orderByExpressions">是否排序</param> /// <returns>实体的分页数据</returns> public PagedList <TEntity> GetPaged(int pageIndex, int pageCount, IDynamicSpecification <TEntity> specification, SortExpression <TEntity> orderByExpressions = null) { if (orderByExpressions == null || !orderByExpressions.IsNeedSort()) { orderByExpressions = new SortExpression <TEntity>(new List <EditableKeyValuePair <Expression <Func <TEntity, dynamic> >, bool> > { new EditableKeyValuePair <Expression <Func <TEntity, dynamic> >, bool>(item => item.Id, false), }); } if (pageIndex == 0) { pageIndex = 1; } //如果动态路由可用则为单库 if (!string.IsNullOrEmpty(specification.Coden)) { var set = DynamicGetAll(specification); //如果找到了单库 if (set != null) { var queryable = set.Where(specification.SatisfiedBy()); int totel = queryable.Count(); IEnumerable <TEntity> items = orderByExpressions.BuildSort(queryable).Skip(pageCount * (pageIndex - 1)).Take(pageCount); return(new PagedList <TEntity>(totel, pageCount, pageIndex, items.ToList())); } } //如果找不到单库 int sum = 0; List <IQueryable <TEntity> > entities = new List <IQueryable <TEntity> >(); foreach (var tmp in DbFactory.GetDynamicDbConfigs(typeof(TEntity))) { var queryable = DynamicGetAll(new SampleRouter(tmp.DynamicCoden)).Where(specification.SatisfiedBy()); sum += queryable.Count(); entities.Add(queryable); } int newDataIndex = (pageIndex + 1) * pageCount; //如果在中值之后则反转排序 if (sum < pageIndex * pageCount * 2 && pageIndex * pageCount > sum) { orderByExpressions.Reverse(); //反转页码 newDataIndex = sum - pageIndex * pageCount; var datas = entities.SelectMany(item => orderByExpressions.BuildSort(item).Take(newDataIndex)).ToList(); orderByExpressions.Reverse(); datas = orderByExpressions.BuildSort(datas).Skip(0).Take(pageCount).ToList(); return(new PagedList <TEntity>(sum, pageCount, pageIndex, datas.ToList())); } else { var datas = entities.SelectMany(item => orderByExpressions.BuildSort(item).Take(newDataIndex)) .Skip(pageCount * (pageIndex - 1)).Take(pageCount).ToList(); return(new PagedList <TEntity>(sum, pageCount, pageIndex, datas.ToList())); } }
/// <summary> ///获取分页数据 /// </summary> /// <param name="pageIndex">页码</param> /// <param name="pageCount">页大小</param> /// <param name="specification">条件</param> /// <param name="orderByExpressions">是否排序</param> /// <returns>实体的分页数据</returns> public PagedList <TEntity> GetPaged(int pageIndex, int pageCount, ISpecification <TEntity> specification, SortExpression <TEntity> orderByExpressions = null) { if (pageIndex == 0) { pageIndex = 1; } var set = GetAllMatching(specification); int totel = set.Count(); IEnumerable <TEntity> items; if (orderByExpressions != null && orderByExpressions.IsNeedSort()) { items = orderByExpressions.BuildSort(set).Skip(pageCount * (pageIndex - 1)).Take(pageCount); } else { items = set.OrderByDescending(item => item.Id).Skip(pageCount * (pageIndex - 1)).Take(pageCount); } return(new PagedList <TEntity>(totel, pageCount, pageIndex, items.ToList())); }