无法使用async将Type ICollection转换为List

时间:2015-11-13 10:52:22

标签: c# repository-pattern

我在服务中有以下代码:

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;可能导致问题,但每次我改变一些东西,其他东西都会破坏!我该怎么做

1 个答案:

答案 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>>它应该可以正常工作。