Иерархический объект извлекает childsIds с помощью linq - PullRequest
0 голосов
/ 17 ноября 2009

Как я могу сделать это в одном операторе linq: Если есть список объектов, где я имею (id, name, parentId). Теперь у меня есть 3 уровня иерархии в этом списке. Я хочу, чтобы, когда я получал идентификатор верхнего уровня в своей функции, мне нужны идентификаторы 3-го уровня.

На данный момент у меня есть это:

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 Ответ

1 голос
/ 17 ноября 2009

Я не проверял, но что-то похожее на это должно работать:

myListObject
  .Where(child =>
     myListObject
     .Where(obj => obj.parentId==objectId)
     .Select(obj => obj.id)
     .Contains(child.parentId))
  .Select(child => child.Id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...