我在服务中有以下代码:
var countriesTask = countryIds != null && countryIds.Any()
? this.dataContext.Countries.Where(c => countryIds.Contains(c.CountryId)).ToListAsync()
: Task.FromResult(new List<Country>());
var countries = await countriesTask;
我想通过创建RepositoryBase类来重构依赖关系Datacontext:
IRepositoryBase:
Task<ICollection<T>> FindAllAsync(Expression<Func<T, bool>> match);
RepositoryBase:
public virtual async Task<ICollection<T>> FindAllAsync(Expression<Func<T, bool>> match)
{
return await this.DbContext.Set<T>().Where(match).ToListAsync();
}
然后重构以上内容:
var countriesTask = countryIds != null && countryIds.Any()
? this.countryRepository.FindAllAsync(c => countryIds.Contains(c.CountryId))
: Task.FromResult(new List<Country>());
var countries = await countriesTask;
我收到类型转换错误(无法从类型ICollection国家/地区转换为类型列表国家/地区,我的大脑今天早上没有工作。我知道有一个ToListAsync&#39;可能导致问题,但每次我改变一些东西,其他东西都会破坏!我该怎么做
答案 0 :(得分:4)
在我看来,你只需要这样做:
var countriesTask =
countryIds != null && countryIds.Any()
? this.countryRepository.FindAllAsync(c => countryIds.Contains(c.CountryId))
: Task.FromResult<ICollection<Country>>(new List<Country>());
基本上?:
运算符的两边都需要返回相同的类型。您的代码试图返回Task<ICollection<Country>>
&amp; Task<List<Country>>
。通过同时返回Task<ICollection<Country>>
它应该可以正常工作。