【发布时间】:2017-11-09 21:37:50
【问题描述】:
在我的存储库中,我有一个方法“AllMakesAsync”,可以从数据库中检索车辆制造:
public async Task<IEnumerable<VehicleMake>> AllMakesAsync()
{
return await _context.VehicleMakes.ToListAsync();
}
在存储库中,我还有“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);
}
有人告诉我,如果要对数据集使用过滤,则不应使用“ToListAsync()”,而应使用“AsQueryable”。
问题是我不知道如何异步实现“AsQueryable”。
我可以像这样返回“AsQueryable”:
public async Task<IQueryable<VehicleMake>> AllMakesAsync()
{
var vehicleMakes = await _context.VehicleMakes.AsQueryable().ToListAsync();
return vehicleMakes.AsQueryable();
}
但是这里我又使用了“ToListAsync()”所以不好。
谁能解释一下如何正确地做到这一点。
【问题讨论】:
标签: c# asynchronous repository-pattern asqueryable