2016-11-09 111 views
0

我有一个LINQ查询,它将几个表连接在一起,并有一个动态where子句。它按预期工作并将预定义的类作为列表返回。linq动态查询也检查链表中是否存在行

我现在也必须加入到一个表中,该表中可能没有一行 - 但如果该行不存在,仍会返回结果。

return (from p in db.POInvMasts.AsNoTracking() 
      join s in db.POInvMastStatusTypes.AsNoTracking() on p.StatusID equals s.ID 
      join po in db.POMasts.AsNoTracking() on p.POMastID equals po.ID 
      join v in db.VendMasts.AsNoTracking() on p.VendorID equals v.ID 

      //Dynamic link here because there will not always be a carrier at this point 
      join c in db.CarrierMasts.AsNoTracking() on p.CarrierID equals c.ID into carriers 
      from c in carriers.DefaultIfEmpty() 

      //Dynamic link here because there will not always be a GR record at this point 
      join gr in db.GRMasts.AsNoTracking() on p.ID equals gr.POInvoiceID into GRs 
      from gr in GRs.DefaultIfEmpty() 

      where (vendorid == 0 || p.VendorID == vendorid) && 
      (statusid == 0 || p.StatusID == statusid) && 
      (pomastid == 0 || p.POMastID == pomastid) && 
      (grstatusid == 0 || gr.StatusID == grstatusid) 

      orderby p.ID 

我可以用.DefaultIsEmpty做些什么吗?或者我可以在where子句中做其他事情来查看GR中是否存在任何东西?

在本质上我想说:

WHERE gr.StatusID == grstatusid或遗传资源不存在。

希望这是有道理的。 谢谢大家!

+0

在这里看到:http://stackoverflow.com/questions/9914623/how-to-make-a-right-join-using-linq-到SQL-C-尖锐 – sr28

回答