代码之家  ›  专栏  ›  技术社区  ›  Tassadaque

三级分层数据LINQ

  •  0
  • Tassadaque  · 技术社区  · 15 年前

    我有三个层次的数据。使用下面的语句,我成功地显示了两个 级别数据。我需要把它扩展到一个层次。

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

    我需要将其扩展为包-->模块-->文档

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

    当做 塔萨达克

    2 回复  |  直到 15 年前
        1
  •  0
  •   Amy B    15 年前

    应在DataContext上使用DataLoadOptions属性。

    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();
    
        2
  •  1
  •   Amy B    15 年前

    有时,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();