C# 存储库中的异步AsQueryable

C# 存储库中的异步AsQueryable,c#,asynchronous,repository-pattern,asqueryable,C#,Asynchronous,Repository Pattern,Asqueryable,在我的存储库中,我有一个方法“AllMakesAsync”,用于从数据库检索车辆品牌: public async Task<IEnumerable<VehicleMake>> AllMakesAsync() { return await _context.VehicleMakes.ToListAsync(); } public异步任务AllMakesAsync() { return wait_context.VehicleMakes.to

在我的存储库中,我有一个方法“AllMakesAsync”,用于从数据库检索车辆品牌:

public async Task<IEnumerable<VehicleMake>> AllMakesAsync()
    {
        return await _context.VehicleMakes.ToListAsync();
    }
public异步任务AllMakesAsync()
{
return wait_context.VehicleMakes.toListSync();
}
在存储库中,我还有“GetVehicleMakesWithPaginationAsync”方法,其中使用了“AllMakesAsync”方法:

  public async Task<IEnumerable<VehicleMake>> GetVehicleMakesWithPaginationAsync(string search, int? page, string sort)
    {
        var makes = await AllMakesAsync();

        switch (sort)
        {
            case "Name desc":
                makes = makes.OrderByDescending(x => x.Name);
                break;
            default:
                makes = makes.OrderBy(x => x.Name);
                break;
        }

        if (search == null)
        {
            return makes.ToList().ToPagedList(page ?? 1, 5);
        }

        return makes.Where(x => x.Name.StartsWith(search, StringComparison.OrdinalIgnoreCase)).ToList().ToPagedList(page ?? 1, 5);
    }
public异步任务GetVehicleMakesWithPaginationAsync(字符串搜索,int?页,字符串排序)
{
var makes=await AllMakesAsync();
开关(分拣)
{
案例“名称描述”:
makes=makes.OrderByDescending(x=>x.Name);
打破
违约:
makes=makes.OrderBy(x=>x.Name);
打破
}
如果(搜索==null)
{
返回makes.ToList().ToPagedList(第1页,第5页);
}
return makes.Where(x=>x.Name.StartsWith(search,StringComparison.OrdinalIgnoreCase)).ToList().ToPagedList(第1页,第5页);
}
有人告诉我,如果我要在数据集上使用过滤,就不应该使用“tolistsync()”,而应该使用“AsQueryable”

问题是我不知道如何异步实现“AsQueryable”

我可以像这样返回“AsQueryable”:

    public async Task<IQueryable<VehicleMake>> AllMakesAsync()
    {
        var vehicleMakes = await _context.VehicleMakes.AsQueryable().ToListAsync();
        return vehicleMakes.AsQueryable();
    }
public异步任务AllMakesAsync()
{
var vehicleMakes=wait_context.vehicleMakes.AsQueryable().ToListAsync();
返回车辆makes.AsQueryable();
}
但在这里我又使用了“ToListAsync()”,所以这并不好


有人能告诉我如何正确执行此操作吗。

您正在执行查询,然后在完成执行并返回结果后,尝试定义查询应该是什么、其中应该包含哪些项、顺序等。您不需要这样做。您需要确定您的查询是什么(确定应该有什么过滤器、什么顺序、页面大小等),然后通过调用
ToListAsync
执行查询


尝试执行查询,获取返回的结果,然后尝试假装那些已返回的结果实际上是一个尚未执行的查询,但实际上并不能确保在执行查询之前定义查询。

您正在执行查询,然后,在您已经完成执行并返回结果之后,您可以尝试定义查询应该是什么、查询中应该包含哪些项、查询的顺序等等。您不需要这样做。您需要确定您的查询是什么(确定应该有什么过滤器、什么顺序、页面大小等),然后通过调用
ToListAsync
执行查询

尝试执行查询,获取返回的结果,然后尝试假装那些已返回的结果实际上是一个尚未执行的查询,但实际上并不能确保在执行查询之前定义查询。

请参阅:请参阅: