LINQが生成するSQLその2

サブクエリの場合。意外ときれいなSQLになるなぁ。

 // Silverlight
 var query =
     from chokyo in _context.GetV_CHOKYOQuery()
     where chokyo.DataKubun != Common.DataKubunList.RaceUma.Delete
         && chokyo.ChokyosiName.Contains(string.IsNullOrEmpty(this.ChokyosiName) ? chokyo.ChokyosiName : this.ChokyosiName)
     select chokyo;
 
 // WCF RIA Service
 public IQueryable GetV_CHOKYO()
 {
     var query = from chokyo in ObjectContext.M_CHOKYO
                 // 本年度成績
                 join chokyo_seiseki1 in
                 (
                     from chokyo_seiseki in ObjectContext.M_CHOKYO_SEISEKI
                     where chokyo_seiseki.Num == "1"
                     select new
                     {
                         ChokyosiCode = chokyo_seiseki.ChokyosiCode,
                         // 省略
                     }
                 ) on chokyo.ChokyosiCode equals chokyo_seiseki1.ChokyosiCode
                 // 累計成績
                 join chokyo_seiseki2 in
                 (
                     from chokyo_seiseki in ObjectContext.M_CHOKYO_SEISEKI
                     where chokyo_seiseki.Num == "3"
                     select new
                     {
                         ChokyosiCode = chokyo_seiseki.ChokyosiCode,
                         // 省略
                     }
                 ) on chokyo.ChokyosiCode equals chokyo_seiseki2.ChokyosiCode
                 select new V_CHOKYO
                 {
                     DataKubun = chokyo.DataKubun,
                         // 省略
                 };
 
    return query;
 }
 
 // 生成されたSQL
 SELECT 
 1 AS [C1], 
 [Filter1].[DataKubun] AS [DataKubun], 
  // 省略
 FROM   (SELECT [Extent1].[DataKubun] AS [DataKubun]
   , [Extent1].[ChokyosiCode] AS [ChokyosiCode1]
   // 省略
   FROM  [dbo].[M_CHOKYO] AS [Extent1]
   INNER JOIN [dbo].[M_CHOKYO_SEISEKI] AS [Extent2] 
    ON [Extent1].[ChokyosiCode] = [Extent2].[ChokyosiCode]
   WHERE (N'1' = [Extent2].[Num]) 
    AND (N'0'  [Extent1].[DataKubun]) 
    AND (( CAST(CHARINDEX(N'調教師名', [Extent1].[ChokyosiName]) AS int)) > 0) ) AS [Filter1]
 INNER JOIN [dbo].[M_CHOKYO_SEISEKI] AS [Extent3] 
  ON [Filter1].[ChokyosiCode1] = [Extent3].[ChokyosiCode]
 WHERE N'3' = [Extent3].[Num]


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中