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

时间:2011-06-17 06:16:45

标签: c# linq entity-framework entity-framework-4 linq-to-entities

我有两个IEnumerables:

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

它们来自两个不同的上下文。 ThisEmployee和ThatEmployee不匹配类型。除了EmployeeNumber属性之外,它们不会共享任何类似的内容。

我希望获得该员工中具有匹配的EmployeeNumber的员工的所有ThatEmployee.Notes。

我不能为我的生活弄清楚如何。

3 个答案:

答案 0 :(得分:2)

您的馆藏来自不同的环境,因此首先要在员工对象中获取员工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;

答案 1 :(得分:0)

如下:

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

答案 2 :(得分:0)

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