Linq to sql GroupJoin与筛选空相关项的位置

Linq to sql GroupJoin与筛选空相关项的位置,linq-to-sql,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() ==

使用这两种方法中的任何一种从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);

我习惯于在SQL中使用左外部联接来实现这一点,第一个示例使用了左外部联接。第二个例子使用了一种非IN类型的方法,这不是我以前使用过的方法

两种方法都返回相同的数据。从简单性的角度来看,第二个是我比较喜欢的。第一种有什么好处吗


有其他方法吗?

SQL Server的查询优化器将对左连接执行相同的操作,其中b为NULL,而a为IN。。。通过查看估计的执行计划来确认这一点

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