使用其中任何一个从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”类型的方法,这不是我以前用过的方法。
两种方式都返回相同的数据。从简单的角度来看,第二个是我的首选。第一个有优势吗?
你还有另一种方法吗?
答案 0 :(得分:0)
SQL Server查询优化器将使用LEFT JOIN WHERE b is NULL
和WHERE IN
执行相同操作...通过查看估计的执行计划来确认。