如何在异步方法中实现 WHERE

我正在尝试使用 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”。


我在文档中看到大多数扩展都针对 IQueryable<>,但我使用的是 IEnumerable<>。这可能是问题吗?但是 Where() 返回 IEnumerable。


有任何想法吗?


汪汪一只猫
浏览 160回答 3
3回答

慕尼黑8549860

您需要使用表达式,而不是函数。所以:public async Task<IEnumerable<TEntity>> Where(Expression<Func<TEntity, bool>> predicate){&nbsp; &nbsp; var tmp = await this.DbSet.Where(predicate).ToListAsync();&nbsp; &nbsp; return tmp;}Func<TEntity, bool>需要一个实际的函数,而Expression<Func<TEntity, bool>>需要一个表达式树。基于IQueryable此表达式树构建您的 SQL 查询。通过使用 Func,您可以从常规 LINQ 调用 Where 的重载,这将返回一个 IEnumerable。哪个没有 ToListAsync。

米脂

您需要导入命名空间Microsoft.EntityFrameworkCore。有关详细信息,请参阅官方文档。

慕森卡

您必须添加其名称空间,该名称空间包含在EntityFramework.dll.请在这里找到。
打开App,查看更多内容
随时随地看视频慕课网APP