如何将此sql查询转换为Linq查询?
select *
from setupUOMs as su
LEFT OUTER JOIN scmSKUUoMs as ssu
on su.UoMID != ssu.UoMID
where ssu.SKUID = 446 and su.UMTypeID = 5
以下是linq查询。
from c in setupUOMs
join o in scmSKUUoMs
on c.UOMID equals o.UoMID into sr
from x in sr.DefaultIfEmpty()
where x.SKUID == 446
select x
在上面的查询中我到目前为止只提取连接数,但我想要的是选择左表的非相等记录,但我能够显示连接记录。并且它返回仅左表的记录,而我的结果基于两列。在where子句中,我可以访问x.SKUID,它来自左表,但不能访问x.UMTypesID,它是右表的表示(表示没有返回右表中的列,我可以在其中生成条件)。
答案 0 :(得分:0)
看看这个LEFT JOIN LINQTOSQL示例。
http://www.devcurry.com/2011/01/linq-left-join-example-in-c.html
也许会有所帮助。
答案 1 :(得分:0)
具有非等于条件的联接不是联接,而是笛卡尔积,不包括内部联接记录。可能有正当理由像您一样进行查询,但总是存在以记录数量方式炸毁结果集的风险。
因此,我们假设条件确保结果有意义,然后您可以这样做:
from su in setupUOMs
from ssu in scmSKUUoMs // from .. from is a Cartesian product
where su.UOMID != ssu.UoMID
&& ssu.SKUID == 446
&& su.UMTypeID == 5
select new { su.Prop1, ssu.Prop2, ... }