2010-05-07 65 views
0

我有三级分层数据。使用下面的声明我设法显示两个 级别的数据。我需要将它扩展到更多层面。三级分层数据-linq

当前层次结构是模块 - >文件

我需要把它延伸套餐 - >模块 - >文件

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

问候 Tassadaque

回答

0

您应该使用DataLoadOptions 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

有时DataLoadOptions路由不好 - 因为在子集合上可能需要额外的过滤/排序。这是另一种方式去:

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

对不起,以便延迟响应... 谢谢你这解决了我的问题。但我仍然很好奇发布在问题中的查询可以被扩展与否 – Tassadaque 2010-05-11 08:42:29