【发布时间】:2021-10-19 14:05:01
【问题描述】:
我正在实施工作单元模式 (不是我的选择,我知道它被某些人视为反模式)。 我遇到了一个我不完全理解的情况。
我的通用回购构造函数:
this.context = context;
this.dbSet = context.Set<T>();
通用方法:
public virtual async Task<IEnumerable<T>> All()
{
return await dbSet.ToListAsync();
}
我用它:
var languages = await _unitOfWork.Languages.All();
languages = languages.OrderBy(x => x.Order);
如上所示,我需要下一行以便使用 OrderBy, 我不明白为什么。
第二个问题是,ToListAsync 假设返回一个列表,为什么我会得到一个 IENUMARABLE?
【问题讨论】:
-
List是IEnumerable的实现。 -
2.因为你是这样写的 (
All()) ... 1. 显然你不能使用_unitOfWork.Languages.All().OrderBy(x => x.Order)因为 All 返回Task<T> -
您不必“下线”,但
All返回的是Task,因此您需要先await它才能让IEnumerable<T>工作和。await直到All可以用括号括起来,然后你可以从那里OrderBy。 -
因为
await...你可能会使用var languages = (await _unitOfWork.Languages.All().)OrderBy(x => x.Order); -
您可能正在使用另一个
ToListAsync?据我了解,您想从EntityFramework.dll使用ToListAsync,在这种情况下,您应该检查对EnityFramework.dll的依赖并检查是否使用System.Data.Entity,其中扩展方法是。
标签: c# asp.net-core asynchronous .net-core