如何在Entity Framework中执行条件包含

Luc*_*iro 5 c# entity-framework

我目前正在使用EF而且我有两张桌子,Employees并且Orders鉴于它Employee有多个Orders.

我需要在EF中执行一个查询,它会为我提供所有Employees相关的列表Orders,但只包含两个日期之间的查询.如果在给定时间内Employee没有执行任何操作Order,他的Orders列表将为空.

我想我需要从EmployeesDbSet 开始我的查询,但是如何为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();
    }
Run Code Online (Sandbox Code Playgroud)

有帮助吗?我想我可能会错过这里非常简单的事情.

bto*_*rdz 2

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

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

var query = _context.Set<Orders>()
                    .Where(o => o.OrderDate <= toDate &&
                                o.OrderDate >= fromDate && 
                                ids.Contains(o.EmployeeID))
                    .Include(e => e.Employee));
Run Code Online (Sandbox Code Playgroud)