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

本文关键字:执行 条件 包含 框架 实体 | 更新日期: 2023-09-27 18:10:55

我目前使用EF,我有两个表,EmployeesOrders,假设Employee有多个Orders

我需要在EF中执行一个查询,它给我带来了所有Employees及其相关Orders的列表,但只有两个日期之间的列表。如果Employee在给定的时间段内没有执行任何Order,则其Orders列表将为空。

我想我需要从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();
    }

帮忙吗?我想我可能错过了一些非常简单的东西。

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

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

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

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

尝试替换

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

myQuery.Load();
myQuery.SelectMany(x=>x.y).Where( ....).Load();