2010-09-24 2 views
0

j'ai ce SQLcomment interroger ce dans 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] ) 

Comme vous pouvez le voir, je veux tous les [] LeftHand objets (y compris ceux qui ne sont pas avoir un [RightHand]), mais dans le cas où ils ont un [RightHand] alors son ID doit être de cette liste (59,60,63,64,65)

Alors, comment puis-je obtenir le même résultat dans LINQ ?

LINQ to Entities,
cadre 4

grâce

Répondre

0

Pourriez-vous préciser un point pour moi si, dans votre question, vous déclarez que l'ID doit être dans la liste

mais dans le cas où ils ont un [RightHand] alors son ID doit être de cette liste (59,60,63,64,65)

mais votre SQL fait le contraire; il exclut les ID de la liste

OU [Head]. [RightHand_Id] Pas dans (59,60,63,64,65)

Voulez-vous d'inclure les ID de la liste ou les exclure?


En supposant que vous voulez les exclure; Cela devrait faire l'affaire pour vous.

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)); 
} 

Si vous souhaitez les inclure à la place; changer cette partie du code ...

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

ressembler à ceci ...

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

Merci DoctaJonez pour la réponse rapide, il est très tard ici, je vais l'essayer demain. au fait .. j'ai besoin des mains droites qui ne sont pas dans la liste vous avez raison c'est mon erreur – SomeOne164

+0

Malheureusement cela ne fonctionne pas, "l.Head" est une collection (un à plusieurs) – SomeOne164

0

Je l'ai résolu

dans le cas où quelqu'un besoin de la réponse

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; 
} 

merci DoctaJonez votre réponse m'a aidé à y arriver.

+0

De rien, Je suis content que vous ayez réussi à le régler :-) –

Questions connexes