为了账号安全,请及时绑定邮箱和手机立即绑定

如何在异步方法中实现 WHERE

如何在异步方法中实现 WHERE

C#
汪汪一只猫 2022-07-23 17:22:53
我正在尝试使用 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。有任何想法吗?
查看完整描述

3 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

您需要使用表达式,而不是函数。


所以:


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>>需要一个表达式树。基于IQueryable此表达式树构建您的 SQL 查询。通过使用 Func,您可以从常规 LINQ 调用 Where 的重载,这将返回一个 IEnumerable。哪个没有 ToListAsync。


查看完整回答
反对 回复 2022-07-23
?
米脂

TA贡献1836条经验 获得超3个赞

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


查看完整回答
反对 回复 2022-07-23
?
慕森卡

TA贡献1806条经验 获得超8个赞

您必须添加其名称空间,该名称空间包含在EntityFramework.dll.

请在这里找到。


查看完整回答
反对 回复 2022-07-23
  • 3 回答
  • 0 关注
  • 111 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信