LINQ to Entity, объединяющий таблицы NOT IN - PullRequest
10 голосов
/ 06 апреля 2010

Мой мозг сейчас кашляет!Я использую LINQ to Entity, и мне нужно получить некоторые данные из одной таблицы, которая НЕ существует в другой таблице.

Например: мне нужен идентификатор группы, имя группы и номер группы из ТАБЛИЦЫ A, где они не существуютв ТАБЛИЦЕ B. Идентификатор groupID будет существовать в ТАБЛИЦЕ B вместе с другой соответствующей информацией.Таблицы не имеют никакого отношения.В SQL это было бы довольно просто (есть более элегантное и эффективное решение, но я хочу нарисовать картину того, что мне нужно)

SELECT
   GroupID,
   GroupName,
   GroupNumber,
FROM
   TableA
WHERE
   GroupID NOT IN (SELECT GroupID FROM TableB)

Существует ли простой / элегантный способ сделать это с помощьюEntity Framework / LINQ для Entity?Прямо сейчас у меня есть куча запросов, которые попадают в БД, затем сравниваются и т. Д. Это довольно грязно.

Ответы [ 3 ]

15 голосов
/ 06 апреля 2010

Вы можете использовать любой

  var temp =context.TableA
         .Where(x=>!context.TableB.Any(y=>y.GroupID!=x.GroupID))
         .Select(x=>new { GroupID = x.GroupID, GroupName=x.GroupName, GroupNumber = x.GroupNumber}).ToList();
4 голосов
/ 06 апреля 2010

Это зависит от того, как вы их встретили, чего не показываете, но, как правило:

var q = from a in Context.TableA
        where !a.Group.TableBs.Any()
        select new
        {
            GroupID = a.GroupID,
            GroupName = a.GroupName,
            GroupNumber = a.GroupNumber
        };
1 голос
/ 07 января 2016

@ Nix - Ваш набор результатов должен был быть либо:

 var temp =context.TableA
         .Where(x=>context.TableB.Any(y=>y.GroupID != x.GroupID))
         .Select(x=>new { GroupID = x.GroupID, GroupName=x.GroupName, GroupNumber = x.GroupNumber}).ToList();

Или

var temp =context.TableA
         .Where(x=> ! context.TableB.Any(y=>y.GroupID == x.GroupID))
         .Select(x=>new { GroupID = x.GroupID, GroupName=x.GroupName, GroupNumber = x.GroupNumber}).ToList();

Но НЕ оба, как вы написали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...