2009-05-18 18 views
0

使用其中任何一個來檢索TableA中沒有TableB中相關元素的元素是否有優勢?GroupJoin與哪裏可以過濾出與空項目相關的項目

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

SQL Server的查詢優化器將使用LEFT JOIN WHERE b is NULLWHERE IN做同樣的事情...通過查看估計的執行計劃來確認這一點。

相關問題