Подтвердить что ты не робот

LINQ to Entity, соединяющий таблицы NOT IN

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

var q = from a in Context.TableA
        where !a.Group.TableBs.Any()
        select new
        {
            GroupID = a.GroupID,
            GroupName = a.GroupName,
            GroupNumber = a.GroupNumber
        };

Ответ 3

@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();

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