2016-03-28 16 views
0

Bu sorgu çıktısını bir ana ayrıntı nesnesi grafiğine yansıtmak için yardıma ihtiyacınız var.Linq Query Group'u Projeksiyon yoluyla Ana Ayrıntıya Katıldı

Sorgunun ayrıca Ana alanlar tarafından da gruplandırılması gerekir.

Beklenen sonuç, her ana nesnenin ayrıntılı nesne koleksiyonuna sahip olmasıdır.

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

Şimdiden teşekkürler.

gerçek bir senaryo 11 tablolar içerir ve çok karmaşık

DÜZENLEME. Mevcut sorgu birleştirme yapısını kırmayan bir şeye ihtiyacım var.

DÜZENLEME 2

Usta DTO Smid, smnm, smorder, moduleid, modulename ve alanların kalanını olacak detay DTOs bir koleksiyona sahip olmalıdır.

+0

Herhangi bir şansla Çeviriniz Modüller ve Alt Modüller? Modüllere sahip SubModules'i hayal etmekte zorlanıyorum. –

+0

@GertArnold Modules, sayfaları olan SubModüllere sahiptir. Teşekkürler – Deb

cevap

1

Sorguyu değiştirmeniz gerekmez ve geçerli projeksiyondan (q) ToLookup uzantısını kullanarak yeni bir sorgu oluşturabilirsiniz. Ana verileri, arama anahtarı olarak kullanın.

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