2011-12-09 38 views
1

這是一個相當簡單的查詢,但我似乎無法在EF中完成它。EF模型查詢選擇哪裏沒有在

的C#等價的:

SELECT A1, A2 from TABLEA WHERE A3 NOT IN (SELECT B1 FROM TABLEB WHERE ...) 
    AND A4 IN (SELECT C2 FROM TABLEC WHERE ....) 

我寧願在數據庫上運行查詢爲tableB具有> 5000000行這樣的表現是一個重要因素。

回答

7

喜歡這個

var b1s = from b in TableB 
      where ... 
      select b.B1; 

var c2s = from c in TableC 
      where ... 
      select c.C2; 

var a1sAndA2s = from a in TableA 
       where !b1s.Contains(a.A3) 
        && c2s.Contains(a.A4) 
       select new { 
        a.A1, 
        a.A2 
       }; 

要查看生成的SQL語句您可以使用SQL語句示蹤劑(不要引用我的名字,但它的建成爲VS2010)或搶語句作爲String通過

String sqlStatement = (a1sAndA2s as ObjectQuery).ToTraceString(); 
+0

謝謝!有沒有更有效率的版本? tableB有> 5000000行,所以寧願查詢在數據庫上運行如果可能 – Kumar

+1

@Kumar爲什麼這不會完全針對數據庫執行? LINQ執行被推遲。 – Yuck

+0

想確保這不會發生在客戶端!是否有收費/進程調試/識別發送到數據庫的實際查詢? – Kumar