Linq动态查询还可以检查链接表中的一行是否存在

本文关键字:一行 存在 是否 查询 动态 还可以 检查 链接表 检查链接 Linq | 更新日期: 2023-09-27 18:17:01

我有一个LINQ查询,它将几个表连接在一起,并有一个动态where子句。它按预期工作,并以列表的形式返回预定义的类。

我现在还必须连接到一个表,它可能没有行-但仍然带回的结果,如果行不存在。

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 OR gr DOES NOT EXIST.

希望这是有意义的。谢谢各位!

Linq动态查询还可以检查链接表中的一行是否存在

实际上我认为你想说左连接…MSDN左连接