2016-03-28 1 views
0

このクエリ出力をマスターディテールオブジェクトグラフに投影する際のヘルプが必要です。Linqがマスター詳細に投影してクエリグループを結合しました

また、クエリはマスタフィールドでグループ化する必要があります。

すべてのマスターオブジェクトは、詳細オブジェクトのコレクションを持つことになります。

var q = from ee in db.Pages 
     from ff in db.SubModules.Where(p => p.submoduleid == ee.submoduleid) 
     from gg in db.Modules.Where(p => p.moduleid == ff.moduleid) 
     select new 
          { 
          // detail fields 
           pageid = ee.pageid, 
           pagename = ee.pagename, 
           pageurl = ee.pageurl, 
           pgorder = ee.orderno, 
           pgstat = ee.status, 

          //Master fields from here 
           smid = ff.submoduleid, 
           smnm = ff.submodulename, 
           smorder = ff.orderno, 
           moduleid = gg.moduleid, 
           modulename = gg.modulename 
          }; 

ありがとうございます。

EDIT

実際のシナリオでは、11個のテーブルを含み、非常に複雑です。私は、既存のクエリ結合構造を壊さないものが必要です。

EDIT 2

マスターDTOはSMID、smnm、smorder、モジュールID、モジュール名とフィールドの残りの部分を持っています、詳細のDTOのコレクションを持っている必要があります。

+0

あなたはフリップモジュールとサブモジュールをやりとりしましたか?モジュールを所有しているSubModuleを想像するのは苦労します。 –

+0

@GertArnold Modulesにはページを持つSubModuleがあります。ありがとう – Deb

答えて

1

クエリを変更する必要はなく、現在の投影法(q)からToLookup拡張を使用して新しいクエリを作成できます。 ルックアップキーとしてマスターデータを使用します。

var md = q.ToLookup(ee=> new 
        { 
         pageid = ee.pageid, 
         pagename = ee.pagename, 
         pageurl = ee.pageurl, 
         pgorder = ee.orderno, 
         pgstat = ee.status, 
        }) 
       .Select(c=> new 
       { 
        Master = c.Key, 
        Details = c.Select(ff=>new 
         { 
          smid = ff.submoduleid, 
          smnm = ff.submodulename, 
          smorder = ff.orderno, 
          moduleid = ff.moduleid, 
          modulename = ff.modulename 
         }).ToList() 
       }); 
関連する問題