Мой мозг, похоже, сейчас месит! Я использую 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, затем сравнение и т.д. Это довольно грязно.
Ответ 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();
Но НЕ оба, как вы его написали.