抱歉,如果问题看起来太明显了。
在我的员工管理系统中,我有一个实体,其中包含以下字段:个人电子邮件、公司电子邮件和用户名。我知道我可以将其配置为不接受数据库中的重复项,但如果数据库中存在相同的电子邮件或用户名,我有特定的规则。在创建之前,我需要检查这三个字段是否存在以遵循不同的流程。
执行此查询的最佳方式、最高效的方式是什么?
我正在使用三个查询 AnyAsync(),但是三个查询呢?一定有更好的方法。
编辑:我想要三个布尔值,我需要知道三个字段中哪一个有冲突。
我把它作为答案而不是评论,因为评论太多了。
将重复项的发现与布尔结果分开。
鉴于:
var candidateCorporateEmail = "...";
var candidatePersonalEmail = "...";
var candidateUsername = "...";
然后使用单个查询:
var existingEntity = Entities.Where(e => e.CorporateEmail.Equals(candidateCorporateEmail) || e.PersonalEmail.Equals(candidatePersonalEmail) || e.Username.Equals(candidateUsername)).FirstOrDefault();
所以布尔值很简单:
var isDuplicateCorporateEmail = existingEntity?.CorporateEmail.Equals(candidateCorporateEmail) ?? false;
var isDuplicatePersonalEmail = existingEntity?.PersonalEmail.Equals(candidatePersonalEmail) ?? false;
var isDuplicateUsername = existingEntity?.Username.Equals(candidateUsername) ?? false;
此外,记录生成的查询并确定数据库的执行计划。可能需要每列都有一个索引,或者可能需要一个复合索引。