0

如何将此 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(意味着没有返回右表中的列,我可以在其上创建条件)。

4

2 回答 2

0

看看这个 LEFT JOIN LINQTOSQL 示例。

http://www.devcurry.com/2011/01/linq-left-join-example-in-c.html

也许会有所帮助。

于 2012-11-20T12:16:46.990 回答
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, ... }
于 2012-11-20T18:37:22.027 回答