2016-11-09 116 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

回答