Can anyone tell me why this is not working?
I have a method that looks like this:
public virtual async Task<IList<User>> GetAll()
{
return this.db.Users.Where(model => model.CompanyId.Equals(this.companyId, StringComparison.OrdinalIgnoreCase)).ToListAsync();
}
when I try to compile my code I get an error stating:
Error 10 Cannot implicitly convert type 'System.Threading.Tasks.Task>' to 'System.Collections.Generic.IList'. An explicit conversion exists (are you missing a cast?) C:\Users\Jaymie\Documents\GitHub\Skipstone\Skipstone.Web\Repositories\UserRepository.cs 70 20 Skipstone.Web
Yet directly under it I have this method:
public Task<User> FindByIdAsync(string userId)
{
return this.db.Users.Where(model => model.Id.Equals(userId, StringComparison.OrdinalIgnoreCase)).SingleOrDefaultAsync();
}
which works fine.
I think I can't see the wood for the trees so need someone else's eyes to help me out :)
If you are using async keyword, then you need use await keyword return original type .
Or without async you need to specify type Task as you did in the second sample that is working.
The
ToListAsync
methods return aTask<List<T>>
object, which translate to aTask<List<User>>
object in your case, but your method's return type isTask<IList<User>>
.The issue here is that covariance is not supported for
T
inTask<T>
.So, either you change the method's return type to
Task<List<User>>
, or you write the code to make the conversion yourself: