我正在学习来自C#
的Java
,我知道此平台上存在许多此类问题,我已经检查了它们,但没有一个解释我的问题。我喜欢C#
和Java
有很多相似之处,这使我的转换过程变得更加快捷和顺畅,这就是说我正在构建一个API
并将返回paginated result
的情况,分页效果很好,当我尝试引入一个Single
响应对象时,我的API
不管端点如何返回,都会出现问题,我的响应类如下所示
public class PaginatedResponse<T>
{
public PaginatedList<T> PaginatedList;
public int Page { get; set; }
public int PageSize { get; set; }
public Boolean HasNextPage { get; set; }
public Boolean HasPreviousPage { get; set; }
public int TotalItemCount { get; set; }
}
我希望它返回有关分页的元数据,这应该与我的分页类紧密结合,看起来像这样
public class PaginatedList<T> : List<T>
{
public int PageIndex { get; private set; }
public int TotalPages { get; private set; }
public PaginatedList(List<T> items, int count, int pageIndex, int pageSize)
{
PageIndex = pageIndex;
TotalPages = (int)Math.Ceiling(count / (double)pageSize);
this.AddRange(items);
}
public bool HasPreviousPage
{
get
{
return (PageIndex > 1);
}
}
public bool HasNextPage
{
get
{
return (PageIndex < TotalPages);
}
}
public static async Task<PaginatedList<T>> CreateAsync(IQueryable<T> source, int pageIndex, int pageSize)
{
var count = await source.CountAsync();
var items = await source.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync();
return new PaginatedList<T>(items, count, pageIndex, pageSize);
}
}
再次像我说的那样,分页效果很好,当我需要它返回PaginatedResponse
而不是PaginatedList
时出现了问题>
所以我修改了CreateAsync
方法,看起来像这样
public static async Task<PaginatedResponse<T>> CreateAsync(IQueryable<T> source, int pageIndex, int pageSize) { var count = await source.CountAsync(); var items = await source.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync(); var totalPages = (int)Math.Ceiling(count / (double)pageSize); return new PaginatedResponse<T> { PageSize = pageSize, TotalItemCount = count, HasNextPage = pageIndex < totalPages, HasPreviousPage = pageIndex > 1, PaginatedList = new PaginatedList<T>(items, count, pageIndex, pageSize) }; }
我现在的问题是当我尝试调用
CreateAsync
之类的时候>>IQueryable<MyClass> source = SourceCreator.CreateSource(); return await PaginatedList<PaginatedResponse<MyClass>>.CreateAsync(source, page, pageSize);
它给我错误
cannot convert from 'System.Linq.IQueryable<MyClass>' to 'System.Linq.IQueryable<PaginatedResponse<MyClass>>'
我该如何解决?
我正在学习来自Java的C#,我知道这个平台上有很多这样的问题,我已经检查了出来,但是都没有一个解释我的问题。我喜欢C#和Java共享很多的事实...
事实证明,我不得不像PaginatedList<MyClass>.CreateAsync(source, page, pageSize)
那样称呼它>