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 に答える