实体框架 - LINQ加入帮助

时间:2010-02-05 09:41:21

标签: linq entity-framework join many-to-many inner-join

我有以下架构:

客户 - ClientId 用户 - UserId 办事处 - OfficeId

ClientOffices - ClientId,OfficeId UserOffices - UserId,OfficeId

粗体实体是EntityFramework实体。

现在我需要编写一个接受UserId的函数并返回一个客户列表 - 它们也属于用户所属的办公室。

例如,Say ABC Inc.与伦敦办事处合作,XYZ Inc.与纽约办事处合作。 用户“Yakoon”仅适用于Lond Office。

执行时的linq语句只能返回ABC Inc. 如果“Yakoon”也属于纽约办事处,那么它应该返回btoh ABC和XYZ Inc。

由于

2 个答案:

答案 0 :(得分:2)

实体框架等效方法类似于:

public IEnumerable<Client> GetClientsForUser(int id)
{
  return (from u in objectContext.Users
            where u.UserId == id
          from o in u.Offices
          from c in o.Clients
          select c);

}

确保您的UserOffices和ClientOffices表上有主键,以便EF将它们识别为联结表。

答案 1 :(得分:1)

这个怎么样:

public IEnumerable<Client> GetClientsForUser(int id)
{
  return (from u in userOffices 
    where u.UserId == id
    join o in clientOffices on u.OfficeId equals o.OfficeId
    join c in clients on o.ClientId equals c.ClientId
    select c);
}