gpt4 book ai didi

c# - 实体通用分页

转载 作者:太空宇宙 更新时间:2023-11-03 13:05:42 25 4
gpt4 key购买 nike

我必须查询一个表中的所有行。一口气,查询太长了,我超时了。所以我想使用分页分几批运行此查询。但是要执行 sizetake orderby 是必需的。这就是问题所在,如何按通用(可能在主键上)进行排序?还是有没有 order by 的方法?

public async Task<IEnumerable<T>> GetListBatchLoadingAsync<T>(Expression<Func<T, bool>> iWhere = null, long iSize) where T : class, IEntity
{
IQueryable<T> theQueryable = RepositoryDBContext.Set<T>();

//Where clause
if (iWhere != null)
theQueryable = theQueryable.Where(iWhere);

//batch loading
Int64 entitiesCount = await theQueryable.CountAsync();
int totalPage = (int)Math.Ceiling(decimal.Divide(entitiesCount, iSize));

//query
var result = new List<T>();
for (int a = 0; a < totalPage; a++)
result.AddRange(await theQueryable.OrderBy(x=>x. ????).Skip(TAKECOUNT * (a)).Take(TAKECOUNT).ToListAsync());

return result;
}

最佳答案

我写了一个分页扩展,可能对你有用。具体来说,我认为通用 IOrderedQuerable 说明了如何使 OrderBy 通用:

public static IPagedEntities<T> WithPaging<T>(this IOrderedQueryable<T> orderedQuery, int page, int pageSize)
{
var totalEntities = orderedQuery.Count();

var entities = orderedQuery.Skip((page * pageSize)).Take(pageSize);

return new PagedEntities<T>(page, pageSize, totalEntities, entities);
}

它的用法如下:

// base query
var query = _dbContext.SomeItems.AsQueryable();

var orderedQuery = query.OrderBy(t => t.SomeProperyToOrderBy);

// pages the results
// the WithPaging extension method requires an IOrderedQueryable
// (orderedQuery) which is produced by calling OrderBy on an IQueryable<T>
var withPaging = orderedQuery.WithPaging(yourDesiredPage, yourDesiredPageSize);

IPagedEntities 只是用一些与分页操作相关的额外元数据包装了一个 IEnumerable。它与您的问题不太相关,但为了完整起见,我将其包括在内:

public interface IPagedEntities<out T>
{
int Page { get; }
int PageSize { get; }
int TotalSize { get; }
int Pages { get; }
int NumberSkipped { get; }
int? NextPage { get; }
int? PriorPage { get; }
int FirstPage { get; }
int LastPage { get; }
bool OnFirstPage { get; }
bool OnLastPage { get; }
bool HasNextPage { get; }
bool HasPreviousPage { get; }

IEnumerable<T> Entities { get; }
}

关于c# - 实体通用分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30872715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com