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或遺傳資源不存在。
希望這是有道理的。 謝謝大家!
在這裏看到:http://stackoverflow.com/questions/9914623/how-to-make-a-right-join-using-linq-到SQL-C-尖銳 – sr28