GroupJoin vs.过滤掉null相关项的位置

时间:2009-05-18 13:53:23

标签: linq-to-sql

使用其中任何一个从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中使用左外连接来执行此操作,这是第一个使用的示例类型。第二个例子使用了“NOT IN”类型的方法,这不是我以前用过的方法。

两种方式都返回相同的数据。从简单的角度来看,第二个是我的首选。第一个有优势吗?

你还有另一种方法吗?

1 个答案:

答案 0 :(得分:0)

SQL Server查询优化器将使用LEFT JOIN WHERE b is NULLWHERE IN执行相同操作...通过查看估计的执行计划来确认。

相关问题