2013-05-11 10 views
7

Chcę utworzyć kilka przypadków testowych dla zapytań Entity Framework, które z pewnością generują polecenia SQL zawierające aplikacje CROSS APPLY lub OUTER APPLY.Entity Framework i CROSS/OUTER APPLY

Czy ktoś może pokazać typowe scenariusze, w których pojawiają się zapytania SQL?

Odpowiedz

9

w LINQ 2 SQL to zawsze skutkuje w APPLY:

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

W EF to będzie albo nie, lub też doprowadzić do APPLY (nie wiem który z nich). Jest to połączone korelacji , które wymaga APPLY po stronie SQL.

+3

Dziękujemy! To daje mi zapytanie CROSS APPLY. Również jeśli użyję Take (2) .DefaultIfEmpty(), zostanie utworzone zapytanie OUTER APPLY. – tamasf

3

Coś takiego byłoby wygenerować zewnętrznego zastosowania:

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

          }; 

Jeśli to nie działa, zawsze można przekazać własne zapytanie jeśli używasz EF

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

Pamiętaj jednak, że Twój dostawca musi być SQL Server 2005 i wyższy, EF nie obsługuje aplikacji OUTER APPLY dla Oracle