【发布时间】:2020-04-06 01:53:12
【问题描述】:
有没有办法在不使用 async/await 显式运行的情况下否定返回 Task<bool> 的函数?我的 FluentValidators 中有几个独特的检查。我想做这样的事情:
public Task<bool> HasUniqueNameAsync(Entity entity, string propName, CancellationToken cancellationToken = default(CancellationToken))
{
return _dbContext.Entities.AnyAsync(x => !(x.PropName == propName && x.Id != entity.Id));
}
但是,LINQ 查询不是否定布尔值,而是被转换为
x.PropName != propName && x.Id == entity.Id
这是不等价的。目前,我已经更新了我独特的检查功能,使它们看起来像这样:
public async Task<bool> HasUniqueNameAsync(Entity entity, string propName, CancellationToken cancellationToken = default(CancellationToken))
{
return !await _dbContext.Entities.AnyAsync(x => x.PropName == propName && x.Id != entity.Id);
}
有没有办法在不显式使用 async/await 的情况下添加否定?
【问题讨论】:
-
!Any(x) == All(!x),Any(!x) != !Any(x)。请注意,数据库会通过输入null使事情复杂化,因此这些双重转换甚至不总是可能的,并且只有一种“正确”的方式来编写查询。 -
ContinueWith是一个选项吗? -
附注:不要使用
ContinueWith。它只是await的一个更复杂、更容易出错的版本。
标签: c# entity-framework async-await