C# 关于导航属性的Where条款

C# 关于导航属性的Where条款,c#,entity-framework-core,C#,Entity Framework Core,我有一个雇主实体,该雇主有0名或更多雇员。我希望加载雇主(Id=16),以便其员工导航属性仅列出说英语的人。所以我这样做: _uow.EmployerRepository.FirstOrDefault ( o => o.Id == 16 && o.Employees.Any(a => a.Language == "english"), "Employees"); 显然,“任何”是指“如果任何员工符合您的条件,则返回所有员工记录”。使用此代码,

我有一个雇主实体,该雇主有0名或更多雇员。我希望加载雇主(Id=16),以便其员工导航属性仅列出说英语的人。所以我这样做:

_uow.EmployerRepository.FirstOrDefault (
    o => o.Id == 16
    && o.Employees.Any(a => a.Language == "english"),
    "Employees");
显然,“任何”是指“如果任何员工符合您的条件,则返回所有员工记录”。使用此代码,只要其中任何一位员工的语言设置为“英语”,我的雇主就会被其所有员工填充


如何更改过滤器,使Employees navigation属性只填充语言属性为“english”的员工?

这看起来像是一个两步过程,而不是一步

  • 从数据库中找到你的雇主

  • 现在从
    雇主那里获得所有讲英语的员工。employees

  • 另一种方法是只搜索员工而不是雇主

    我不确定您的结构到底是什么,但您可能可以这样做:

    _uow.EmployeeRepository.Where(x => x.EmployerId = 16 && x.Language == "english")
    
    它实际上意味着“返回第一个拥有“英语”雇员的雇主。您想要所有雇主;雇员只过滤为英语?不,我想要一个雇主(其中id=16),并且只有其员工(员工语言为英语)。当前,雇主加载的内容是正确的,但只要至少有一名员工设置为英语,员工导航属性将填充所有员工(部分为英语,部分为非英语)。