我试图用LINQ将1个表连接到另外2个表上,但我似乎无法弄清楚这是如何完成的。
我可以让它在Visual Studio中编写纯SQL语句,我只是不确定如何将它转换为LINQ。
这是我的SQL语句:
assertThat(mySet.contains(someProperty), is(true))
也许这需要一些解释。
我们有一群客户,这些客户可以拥有一些任务。在任务中,您将拥有工作人员和酋长。在 PersonNumbers 表格中,我有一些关于工作人员和酋长的额外信息,这是我需要的信息。
答案 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
};