2013-05-11 61 views
7

我想爲Entity Framework查詢創建一些測試用例,這些查詢肯定會生成包含CROSS APPLY或OUTER APPLY運算符的SQL命令。實體框架和CROSS/OUTER APPLY

有人可以顯示這些類型的SQL查詢出現的典型場景嗎?

回答

9

在LINQ 2 SQL這總是導致一個APPLY

from t1 in tab1 
from t2 in tab2.Where(t2 => t2.SomeCol == t1.SomeCol).Take(1) 
select new { t1, t2 } 

在EF這要麼失敗,或者也導致APPLY(我不知道是哪一個)。這是一個相關連接,它需要SQL端的APPLY

+3

謝謝!這給了我一個CROSS APPLY查詢。另外,如果我使用Take(2).DefaultIfEmpty(),則會創建一個OUTER APPLY查詢。 – tamasf 2013-05-12 19:05:52

3

像這樣的東西會產生一個外部應用:

var ListLocation = from d in dc.Department        
         select new DepartmentViewModel() 
         { 
          LocationID = d.LocationID, 
          ManagerName = d.Managers.FirstOrDefault(p => p.ManagerId == id).Name 

          }; 

如果不工作,你總是可以通過你自己的查詢,如果您正在使用EF:

var q2 = context.Departments.SqlQuery("Select ..."); 

但請記住這您的提供商必須是SQL Server 2005及更高版本,EF不支持針對Oracle的OUTER APPLY