linq动态查询也检查链表中是否存在行
问题描述:
我有一个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