如何在实体框架中执行条件包含
本文关键字:执行 条件 包含 框架 实体 | 更新日期: 2023-09-27 18:10:55
我目前使用EF,我有两个表,Employees
和Orders
,假设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();