C#泛型无法从TypeA转换为TypeB

问题描述 投票:0回答:1

我正在学习来自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共享很多的事实...

c# linq linq-to-sql
1个回答
0
投票

事实证明,我不得不像PaginatedList<MyClass>.CreateAsync(source, page, pageSize)那样称呼它>

© www.soinside.com 2019 - 2024. All rights reserved.