EF Core 8:条件关联查询员工与假期,无匹配假期仍返回员工
问题场景
需要查询Employees和Holidays集合,核心要求是即使没有找到符合指定条件的假期,仍需返回符合条件的员工。
实体定义
public class Employee { public Guid Id { get; set; } public List<Holiday> Holidays { get; set; } = []; } public class Holiday { public Guid Id { get; set; } public Guid EmployeeId { get; set; } public DateTime Date { get; set; } }
查询需求
编写GetEmployee方法,需实现以下逻辑:
- 根据员工Id搜索目标员工
- 依据
IncludeHolidays枚举值控制假期的包含规则,枚举选项包括:不包含假期、包含所有假期、包含历史假期、包含未来假期
初始代码问题
最初编写的方法存在两个关键问题:
- 嵌套
Where调用导致代码无法编译 - 使用
Holidays.Any会直接排除掉没有匹配假期的员工,无法实现类似SQL左连接的效果
后续问题与解决
改用Filtered Include查询后,发现假期日期过滤规则未生效——生成的SQL语句是正确的,但返回结果却包含了所有假期。查阅EF Core文档后得知,跟踪查询的导航修复机制会导致Filtered Include的结果异常,在查询中添加AsNoTracking()即可解决该问题。
内容的提问来源于stack exchange,提问作者devklick
相关产品推荐
相关产品推荐

