EF4:在对象的IEnumerable列表上加入实体查询

本文关键字:实体 查询 列表 IEnumerable 对象 EF4 | 更新日期: 2023-09-27 17:59:38

我有两个IEnumerables:

IEnumerable<ThisEmployee> thisEmployees;
IEnumerable<ThatEmployee> thatEmployees;

它们是从两个独立的上下文中填充的。ThisEmployee和ThatTemployee的类型不匹配。除了EmployeeNumber属性外,它们没有共享任何类似的内容。

我想得到所有ThatEmployee。在该Employees中具有匹配EmployeeNumber的任何employee的注释。

我一辈子都不知道该怎么做。

EF4:在对象的IEnumerable列表上加入实体查询

您的集合来自不同的上下文,因此在linq中首先将员工的id获取到对象:

 var ids = from e1 in thatEmployees
           join e2 in thisEmployees on e1.EmployeeNumber equals e2.EmployeeNumber
           select e1.Id;

现在使用id在单查询中从数据库中获取Notes

 var notes = from n in context.Notes
             where ids.Contains(n.Employee.Id)
             select n;

由于它在两个不同的上下文中,请尝试使用ToList获取所有对象。然后对对象u使用Linq可以使用Where(r => thisEmployees.Any(s => s.EmployeeNumber == r.EmployeeNumber))。不确定我是否正确理解u:)

像这样的东西怎么样

var notes = thatEmployees
    .Join(thisEmployees,
          ta => ta.EmployeeNumber,
          ti => ti.EmployeeNumber,
          (ta, ti) => ta.Notes)