gpt4 book ai didi

c# - IOrderedQueryable 跳过并获取

转载 作者:行者123 更新时间:2023-11-30 13:37:44 24 4
gpt4 key购买 nike

我有以下抽象类,我的所有存储库都继承自该抽象类:

abstract class RepositoryBase<T> {
void Add();
void Delete();
void SaveChanges();
}

我想添加另一种自动分页 IQueryable<T> 的方法并返回 List<T>从结果来看:

protected List<T> Paginate(IQueryable<T> content, int? skip, int? take)
{
if (skip.HasValue) content = content.Skip(skip.Value);
if (skip.HasValue && take.HasValue) content = content.Take(take.Value);
return content.ToList();
}

但是,Skip要求来源为 IOrderedQueryable<T> .我尝试将方法签名更改为:

Paginate(IOrderedQueryable<T> content, int? skip, int? take)

但是Skip返回 IQueryable<T>所以我收到错误 Cannot convert source type 'System.Linq.IQueryable<T>' to target type 'System.Linq.IOrderedQueryable<T>'

我如何强制实现类向我的方法发送 IOrderedQueryable<T>让我的分页方法起作用?

最佳答案

听起来你可能想要制作 Paginate还是拿IOrderedQueryable<T>编译时验证您已经开始使用已订购的东西 - 但您不需要重新分配给同一个变量。例如:

protected List<T> Paginate(IOrderedQueryable<T> content, int? skip, int? take)
{
// Different variable type so that we can assign to it below...
IQueryable<T> result = content;
if (skip.HasValue) result = result.Skip(skip.Value);
if (skip.HasValue && take.HasValue) result = result.Take(take.Value);
return result.ToList();
}

正如 Marc 指出的那样,更改 Take 可能会更好线到:

if (take.HasValue) result = result.Take(take.Value);

关于c# - IOrderedQueryable 跳过并获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21551777/

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