2010-05-07 7 views
0

J'ai trois niveaux de données hiérarchiques. en utilisant la déclaration ci-dessous j'ai réussi à afficher deux données de niveau. Je dois l'étendre à un niveau de plus.Ligne de données hiérarchique à trois niveaux

hierachy actuelle est Modules -> Documents

Je dois l'étendre comme paquets -> Modules -> Documents

var data = (from m in DataContext.SysModules 
      join d in DataContext.SysDocuments on m.ModuleID equals d.ModuleID into tempDocs 
      from SysDocument in tempDocs.DefaultIfEmpty() 
      group SysDocument by m).ToList(); 

Cordialement Tassadaque

Répondre

0

Vous devez utiliser les DataLoadOptions propriété sur DataContext.

DataLoadOptions dlo = new DataLoadOptions(); 
    //packages are loaded with their modules... 
dlo.LoadWith<SysPackage>(p => p.SysModules); 
    // ... which are loaded with their documents. 
dlo.LoadWith<SysModule>(m => m.SysDocuments); 
myDataContext.LoadOptions = dlo; 
List<SysPackage> result = myDataContext.SysPackages.ToList(); 
1

Parfois, la route de DataLoadOptions est pas bon - parce que le filtrage/commande supplémentaire peut être nécessaire sur les collections enfants. Voici une autre façon d'aller:

var resultList = 
(
    from pack in myDC.SysPackages 
    let mods = 
    (
    from mod in pack.SysModules.Where(mod => mod.ShouldLoad) 
    let docs = mod.SysDocuments.Where(doc => doc.ShouldLoad) 
    select new {Module = mod, Documents = docs.ToList()} 
) 
    select new {Package = pack, Modules = mods.ToList()} 
).ToList(); 
+0

Désolé pour la réponse tardive ... Merci vous permet de résoudre ce mon problème. mais je suis toujours curieux que la requête affichée dans la question peut être étendue ou non – Tassadaque

Questions connexes