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