2012-11-20 289 views
0

如何將此sql查詢轉換爲Linq查詢?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

由於您正在'where'中檢查'ssu.SKUID = 446',所以您可以使用內部連接。 – Magnus

+0

我已有了左外上scmSKUUoMs表setupUOMs的加入並返回非setupUoMs的匹配記錄.. 希望你能理解阿諾德.. –

回答

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