分层对象使用linq检索childsIds

时间:2009-11-17 11:00:45

标签: c# winforms linq

如何在一个linq语句中执行此操作:如果获得了我拥有的对象列表(id,name,parentId)。 现在我在这个列表中有3个级别的层次结构。 我想要的是,当我在我的函数中获得顶级的Id时,我想要3级的ID。

我暂时有这个:

Public List<int> GetIds(int objectId){
   var idList = new List<int>();
   //get the seconds level ids 
   var parentsIds = from n in myListObject
                    where n.parentId.equals(objectId)
                    select n.id;
   //get the third level ids
   foreach(var parentId in parentsIds){
     var childIds = from c in myListObject
                    where c.parentId.equals(parentId)
                    select c.id;
     foreach(var childId in childIds){
       idList.Add(childId);
     }
   }
   return idList;
}

所以我想知道我是否可以在一个linq声明中做到这一点?

1 个答案:

答案 0 :(得分:1)

我还没有对它进行过测试,但类似的东西应该有效:

myListObject
  .Where(child =>
     myListObject
     .Where(obj => obj.parentId==objectId)
     .Select(obj => obj.id)
     .Contains(child.parentId))
  .Select(child => child.Id);