Как преобразовать вложенный иерархический объект сгладить объекты при помощи LINQ? Я знаю, что мы можем легко использовать цикл foreach для достижения этого. Но я задаюсь вопросом, существует ли способ записать это в LINQ.
class Person{
public int ID {get;set}
public string Name {get;set}
public List<Person> Children {get;}
}
Данные:
ID : 1
Name : Jack
Children
2 | Rose
3 | Paul
Мне нравится преобразовывать эти данные в, сглаживают формат как ниже.
1 | Jack
2 | Rose
3 | Paul
Как мы можем сделать это с Linq?
Если вы хотите сравнять с землей произвольно глубокое дерево людей, я предлагаю следующее:
public IEnumerable<Person> GetFamily(Person parent)
{
yield return parent;
foreach (Person child in parent.Children) // check null if you must
foreach (Person relative in GetFamily(child))
yield return relative;
}
Не существует хорошего способа сократить его с помощью LINQ, потому что анонимные ягнята не могут называть себя рекурсивно без реализации Y. Вы могли бы "сократить" вышеприведенный метод до
return parent.Children.SelectMany(p => GetFamily(p))
.Concat(new Person[] { parent });
или альтернативно
yield return parent;
foreach (Person relative in parent.Children.SelectMany(GetFamily))
yield return relative;
, но это кажется мне ненужным.
.