2010-09-24 76 views
0

我有這樣的SQL如何查詢這在LINQ

SELECT * 
FROM [dbo].[LeftHand] 
     left outer JOIN [dbo].[Head] ON [LeftHand].[ID] = [Head].[LeftHand_Id] 
     WHERE [Head].[RightHand_Id] Not IN (59,60,63,64,65) or [Head].[RightHand_Id] is null 

 [Head] 
     */ \* 
     / \ 
     1/  \1 
[LeftHand] [RightHand]  ([LeftHand may have more than one [RightHand] ) 

正如你可以看到我想要得到所有的[LeftHand的]對象(包括不感興趣有任何[RightHand]),但如果他們有一個[RightHand],那麼它的ID必須從這個列表(59,60,63,64,65)

那麼我怎麼能得到相同的結果在LINQ ?

LINQ到實體,
框架4

感謝

回答

0

你能否澄清一點,我雖然在你的問題你的狀態,ID必須是從列表

但如果他們有一個[RightHand],那麼它的ID必須來自該列表(59,60,63,64,65)

但是你的SQL做的是相反的;它排除的ID從列表

WHERE [頭部] [RightHand_Id]不在(59,60,63,64,65)

你想包括來自列表中的ID或排除他們?


假設你想排除它們;這應該爲你做的伎倆。

using (var context = new ContextName()) 
{ 
    //here are the ids we want to filter by 
    var ids = new List<int> { 59,60,63,64,65 }; 
    //get all left hands without a matching right hand 
    var result = context.LeftHands.Where(l => l.Head.RightHand_Id == null 
              //or right hands that aren't in the list 
              || !ids.Contains(l.Head.RightHand_Id)); 
} 

如果你想要包括它們,改變這部分代碼...

//or right hands that aren't in the list 
|| !ids.Contains(l.Head.RightHand_Id)); 

看起來像這樣...

//or right hands that are in the list 
|| ids.Contains(l.Head.RightHand_Id)); 
+0

謝謝DoctaJonez的快速回答,這裏很晚,我明天會試試。順便說一下..我需要右手不在列表中 你是對的這是我的錯誤 – SomeOne164 2010-09-25 00:46:50

+0

不幸的是,不工作,「l.Head」是一個集合(一對多) – SomeOne164 2010-09-25 09:45:45

0

我解決了它

的情況下,任何一個需要的答案

using (var context = new ContextName()) 
{ 
    var ids = new List<int> { 59,60,63,64,65 }; 
    var result = 
     from l in context.LeftHand 
     join Head in contaxt.Head on l equals Head.LeftHand into ljh 
     from j1 in ljh.DefaultIfEmpty() 
     where !ids.Contains(j1.RightHand.ID) || j1 == null 
     select l; 
} 

謝謝DoctaJonez你的回答幫助我達到此目的。

+0

不客氣,我很高興你設法解決它:-) – 2010-09-26 10:03:23