2016-03-28 9 views
0

Benötigen Sie Hilfe zum Projizieren dieser Abfrageausgabe in ein Hauptdetailobjektdiagramm.Verknüpfte Abfragergruppe nach Projektion in Master-Detail

Die Abfrage muss auch nach Master-Feldern gruppiert werden.

Das erwartete Ergebnis ist, dass jedes Masterobjekt eine Sammlung von Detailobjekten hat.

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 
          }; 

Vielen Dank im Voraus.

EDIT

Die tatsächliche Szenario 11 Tabellen beinhaltet und ist sehr komplex. Ich brauche etwas, das die bestehende Query-Join-Struktur nicht durchbricht.

EDIT 2

Meister DTO sollte Smid haben, smnm, smorder, moduleid, modul und eine Sammlung von Detail DTOs, die den Rest der Felder haben.

+0

Haben Sie zufällig Module und Submodule umgedreht? Es fällt mir schwer, mir SubModule mit Modulen vorzustellen. –

+0

@GertArnold Module haben SubModule mit Seiten. Vielen Dank – Deb

Antwort

1

Sie müssen die Abfrage nicht ändern, und Sie können eine neue Abfrage mit der Erweiterung ToLookup aus der aktuellen Projektion (q) erstellen. Verwenden Sie die Stammdaten als Suchschlüssel.

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() 
       });