как запросить это в linq - PullRequest
       2

как запросить это в linq

0 голосов
/ 25 сентября 2010

У меня есть этот SQL

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], тогда его идентификатор должен быть из этого списка 59,60,63,64,65)

Так как я могу получить тот же результат в LINQ?

LINQ to Entities,
Рамки 4

спасибо

Ответы [ 2 ]

0 голосов
/ 25 сентября 2010

Я решил это

на случай, если кому-то понадобится ответ

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 голосов
/ 25 сентября 2010

Не могли бы вы уточнить один момент для меня, хотя в своем вопросе вы утверждаете, что идентификатор должен быть из списка

но если у них есть [RightHand], его идентификатор должен быть из этого списка (59,60,63,64,65)

но ваш SQL делает наоборот; исключает идентификаторы из списка

ГДЕ [Head]. [RightHand_Id] Not IN (59,60,63,64,65)

Хотите включить идентификаторы из списка или исключить их?


Предполагая, что вы действительно хотите исключить их; это должно помочь вам.

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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...