无法使用异步从类型 ICollection 转换为 List。

24 浏览
0 Comments

无法使用异步从类型 ICollection 转换为 List。

我在一个服务中有以下代码:

var countriesTask = countryIds != null && countryIds.Any()
                                    ? this.dataContext.Countries.Where(c => countryIds.Contains(c.CountryId)).ToListAsync()
                                    : Task.FromResult(new List());
        var countries = await countriesTask;

我想通过创建一个RepositoryBase类来重构Datacontext的依赖性:

IRepositoryBase:
    Task<ICollection> FindAllAsync(Expression<Func<T, bool>> match);
RepositoryBase:
    public virtual async Task<ICollection> FindAllAsync(Expression<Func<T, bool>> match)
    {
        return await this.DbContext.Set().Where(match).ToListAsync();
    }

然后进行如下重构:

   var countriesTask = countryIds != null && countryIds.Any()
                                ? this.countryRepository.FindAllAsync(c => countryIds.Contains(c.CountryId))
                                : Task.FromResult(new List());
   var countries = await countriesTask;

我得到了一个类型转换错误(无法将ICollection Country类型转换为List Country类型,而且我的大脑今天早上不工作了。我知道可能是ToListAsync导致了问题,但每次我改变一个东西,另外一个东西就会出问题!我该怎么做?

admin 更改状态以发布 2023年5月21日
0
0 Comments

我觉得你只需要这样做:

var countriesTask =
    countryIds != null && countryIds.Any()
    ? this.countryRepository.FindAllAsync(c => countryIds.Contains(c.CountryId))
    : Task.FromResult>(new List());

基本上,三目运算符的两个条件都需要返回相同的类型。您的代码试图返回Task>Task>。通过使两个条件都返回Task >,它应该能够正常运行。

0