GroupJoin vs. Где отфильтровать нуль-связанные элементы - PullRequest
0 голосов
/ 18 мая 2009

Есть ли какое-либо преимущество в использовании любого из них для извлечения элементов из TableA, которые не имеют связанных элементов в TableB?

TableA
   .GroupJoin(
      TableB,
      o => o.TableAID,
      i => i.TableAID,
      (o,i) => new {o, child = i.DefaultIfEmpty()})
   .Where(x => x.child.Where(c => c != null).Count() == 0)
   .Select(x => x.o);

или

TableA
   .Where(a => !TableB.Select(b => b.TableAID).Contains(a.TableAID));

Я привык делать это с помощью левого внешнего соединения в SQL, которое используется в первом примере. Во втором примере используется подход «НЕ В», который я не использовал для этого раньше.

Оба способа возвращают одни и те же данные. Второй будет моим предпочтительным с точки зрения простоты. Есть ли у первого преимущества?

У вас есть другой способ сделать это?

1 Ответ

0 голосов
/ 18 мая 2009

Оптимизатор запросов SQL Server будет делать то же самое с LEFT JOIN WHERE b is NULL, чем с WHERE IN ... Подтвердите это, посмотрев примерный план выполнения.

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