Linq左外连接查询

时间:2012-11-20 09:18:19

标签: sql-server linq

如何将此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,它是右表的表示(表示没有返回右表中的列,我可以在其中生成条件)。

2 个答案:

答案 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, ... }