> 实体框架核心,c#,entity-framework-core"/>

首页 > 解决方案 > 从表达式返回所有实体> 实体框架核心

问题描述

正如标题所说,我想返回与Expression<Func<T, bool>>EF Core 匹配的所有实体。我已经创建了 FirstOrDefaultAsync,但我找不到任何方法来返回与谓词匹配的所有实体。

public async Task<TEntity> ReadAsync(Expression<Func<TEntity, bool>> predicate)
{
    return await _dbContext.Set<TEntity>().FirstOrDefaultAsync(predicate);
}

我已经看到Where使用该方法的示例,但这并未列为替代方法。如何返回与 EF Core 中的谓词匹配的所有实体?

标签: c#entity-framework-core

解决方案


您可以使用Where. 您应该知道,没有异步版本Where,因为执行被延迟(即Where不会导致查询在数据库上执行,因此没有可以异步运行的操作)。如果你想让你的方法保持异步,你必须等待一个ToListAsync操作:

public async Task<List<TEntity>> ReadAsync(Expression<Func<TEntity, bool>> predicate)
{
    return await _dbContext.Set<TEntity>().Where(predicate).ToListAsync();
}

请注意,在您立即从异步操作返回的情况下,您不需要等待并且可以节省async方法的开销:

public Task<List<TEntity>> ReadAsync(Expression<Func<TEntity, bool>> predicate)
{
    return _dbContext.Set<TEntity>().Where(predicate).ToListAsync();
}

推荐阅读