2013-05-11 15 views
7

CROSS APPLYまたはOUTER APPLY演算子を含むSQLコマンドを確実に生成するEntity Frameworkクエリ用のテストケースをいくつか作成します。Entity FrameworkとCROSS/OUTERが適用されます

これらの種類の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になる(私は知らないその1)。これは、相関結合であり、SQL側でAPPLYが必要です。

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 ..."); 

は、そのかかわらず、覚えておいてください。このような

+3

ありがとうございました!これにより、CROSS APPLYクエリが表示されます。また、Take(2).DefaultIfEmpty()を使用すると、OUTER APPLYクエリが作成されます。 – tamasf

3

何かが外側の適用を生成しますプロバイダがSQL Server 2005以上である必要があります.EFはOracle用のOUTER APPLYをサポートしていません

関連する問題