使用LINQ在另外两个表上连接1个表

时间:2016-02-12 12:25:35

标签: c# sql linq

我试图用LINQ将1个表连接到另外2个表上,但我似乎无法弄清楚这是如何完成的。

我可以让它在Visual Studio中编写纯SQL语句,我只是不确定如何将它转换为LINQ。

这是我的SQL语句:

assertThat(mySet.contains(someProperty), is(true))

也许这需要一些解释。

我们有一群客户,这些客户可以拥有一些任务。在任务中,您将拥有工作人员酋长。在 PersonNumbers 表格中,我有一些关于工作人员酋长的额外信息,这是我需要的信息。

1 个答案:

答案 0 :(得分:1)

您应该可以执行以下操作,假设您的所有联接都基于应该导致实体中的导航属性的外键。 DefaultIfEmpty是使所有内容成为左连接的原因。

var results = from c in db.Customers
              from k in c.Tasks.DefaultIfEmpty()
              from w in k.Workers.DefaultIfEmpty()
              from pw in w.Persons.DefaultIfEmpty()
              from ch in k.Chiefs.DefaultIfEmpty()
              from pc in ch.Persons.DefaultIfEmpty()
              select new
              {
                  c.CustomerId, 
                  c.CustomerName, 
                  pw.Number, 
                  pc.Number
              };

如果您没有导航属性,那么您将不得不使用join

var results = from c in db.Customers
              join xk in db.Tasks on xk.Id equals c.Task_Id 
              from k in xk.DefaultIfEmpty()
              join xw in db.Workers on xw.Id equals k.Worker_Id
              from w in xw.DefaultIfEmpty()
              join xpw in db.Persons on xpw.Person_Id equals w.Id 
              from pw in xpw.DefaultIfEmpty()
              join xch in db.Chiefs on xch.Id equals k.Chief_Id 
              from ch in xch.DefaultIfEmpty()
              join xpc in db.Persons on xpc.Person_Id euals ch.Id
              from pc in xpc.DefaultIfEmpty()
              select new
              {
                  c.CustomerId, 
                  c.CustomerName, 
                  pw.Number, 
                  pc.Number
              };