如何在父实体查询中使用一对多关系中子记录的特定值?
正确实现方式
有两种简洁的单条查询方案:
方案1:通过子集合存在性筛选
用Any()方法判断Event的Occurrences集合中是否存在符合条件的元素,EF会自动转换为SQL关联查询:
var targetEvent = await dbContext.Events .Where(e => e.Occurrences != null && e.Occurrences.Any(o => o.RecurrenceIndex == index)) .FirstOrDefaultAsync();
如果你的EF配置确保Occurrences不会为null(比如通过Fluent API设置了强制关联),可以去掉e.Occurrences != null的判断。
方案2:从Occurrence反向查询父实体
直接从Occurrence出发,筛选后选择对应的父Event,这种写法生成的SQL更简洁:
var targetEvent = await dbContext.Occurrences .Where(o => o.RecurrenceIndex == index) .Select(o => o.Parent) .FirstOrDefaultAsync();
注意:如果多个
Occurrence对应同一个index,FirstOrDefaultAsync()会返回第一个匹配的Event;如果需要去重,可以在查询链中添加.Distinct()。
内容的提问来源于stack exchange,提问作者David Thielen
相关产品推荐
相关产品推荐

