C# 如何在实体框架中执行条件包含

C# 如何在实体框架中执行条件包含,c#,entity-framework,C#,Entity Framework,我目前正在使用EF,我有两个表,Employees和Orders,因为员工有多个订单 我需要在EF中执行一个查询,该查询为我提供所有员工及其相关的订单,但仅限于两个日期之间的订单。如果员工在给定时间段内未执行任何订单,则其订单列表将为空 我想我需要从EmployeesDbSet开始查询,但是如何为Orders属性分配条件呢 我试着这么做,但显然没用 public List<Employee> GetAllByIdListAndDateRange(int[] ids, DateTime

我目前正在使用EF,我有两个表,
Employees
Orders
,因为
员工有多个
订单

我需要在EF中执行一个查询,该查询为我提供所有
员工
及其相关的
订单
,但仅限于两个日期之间的订单。如果
员工
在给定时间段内未执行任何
订单
,则其
订单
列表将为空

我想我需要从
Employees
DbSet开始查询,但是如何为
Orders
属性分配条件呢

我试着这么做,但显然没用

public List<Employee> GetAllByIdListAndDateRange(int[] ids, DateTime fromDate, DateTime toDate)
    {
        var query = _context.Set<Employee>().Where(a => ids.Contains(a.EmployeeID)).Include(a => a.Orders.Where(o.OrderDate <= toDate && o.OrderDate >= fromDate));

        return query.ToList();
    }
public List GetAllByIdListAndDateRange(int[]id,DateTime fromDate,DateTime toDate)
{
var query=_context.Set().Where(a=>ids.Contains(a.EmployeeID)).Include(a=>a.Orders.Where(o.OrderDate=fromDate));
返回query.ToList();
}

有什么帮助吗?我想我可能错过了一些非常简单的内容。

在Include中不能使用Where谓词,但如果从Orders开始,可以简化查询

如果你再想一想,你需要查询的是订单,而不是员工

var query = _context.Set<Orders>()
                    .Where(o => o.OrderDate <= toDate &&
                                o.OrderDate >= fromDate && 
                                ids.Contains(o.EmployeeID))
                    .Include(e => e.Employee));
var query=\u context.Set()
其中(o=>o.OrderDate=fromDate&&
ID.包含(o.EmployeeID))
。包括(e=>e.Employee));
尝试更换

myQuery.Include(x=>x.Y).Load();
作者:


可能重复使用left-outer-join。请参阅此链接:这几乎可以解决我的问题,但我打算遍历
Employee
DbSet。根据你的回答,我无法找到一个没有订单的员工。谢谢你的帮助:)
myQuery.Load();
myQuery.SelectMany(x=>x.y).Where( ....).Load();