我正在尝试使用Where()实现异步方法。我找不到Where方法的任何异步版本。而ToListAsync对于IEnumerable不可用。我应该使用其他方法吗?
public async Task<IEnumerable<TEntity>> Where(Func<TEntity, bool> predicate)
{
var tmp = await this.DbSet.Where(predicate).ToListAsync(); //error: ToListAsync not available
return tmp;
}
DbSet的类型为DbSet<TEntity>
该项目面向.NET Standard 2.0,并引用了Microsoft.EntityFrameworkCore 2.2.1,并且我已经定义了“使用Microsoft.EntityFrameworkCore”。
我在Doc's中看到,大多数扩展都针对IQueryable <>,但是我使用IEnumerable <>。可能是问题所在吗? 但是Where()返回IEnumerable。
有什么想法吗?
答案 0 :(得分:4)
您需要使用表达式,而不是Func。
所以:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
print("activityType: ", userActivity.activityType)
if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
let univrsalLinkURL = userActivity.webpageURL!.absoluteString
print(univrsalLinkURL)
}
return true
}
public async Task<IEnumerable<TEntity>> Where(Expression<Func<TEntity, bool>> predicate)
{
var tmp = await this.DbSet.Where(predicate).ToListAsync();
return tmp;
}
需要一个实际函数,而Func<TEntity, bool>
需要一个表达式树。
Expression<Func<TEntity, bool>>
基于此表达式树构建您的SQL查询。
通过使用Func,您可以从常规LINQ中调用Where的重载,这将返回IEnumerable。
没有ToListAsync。
答案 1 :(得分:0)
您需要导入名称空间Microsoft.EntityFrameworkCore
。有关更多详细信息,请参见官方documentation。
答案 2 :(得分:0)
您必须添加其EntityFramework.dll
中包含的名称空间。
请here找到它。