Предоставлено следующие классы:заселить подэлементы набора списков
public class Parent {
public Parent()
{
children = new List<Child>();
}
public Guid Id { get; set; }
public ICollection<Child> children { get; set; }
}
public class Child {
public Guid Id { get; set; }
public Guid ParentId { get; set; }
}
И следующие данные:
List<Parent> allParents = new List<Parent>() { /* ... */ };
List<Child> allChildren = new List<Child>() { /* ... */ };
Как бы объединить каждый Child
в allChildren
в правильное Parent
в allParents
эффективно?
Единственное решение, которое я могу придумать чувствует себя действительно неэффективна:
foreach (var child in allChildren)
{
allParents.Where(p => p.Id == child.ParentId).Single().Children.Add(child);
}
Edit: Мысль альтернативного решения:
var parents = listOfAllParents();
var allParents = new List<Parent>();
foreach (var parent in parents) {
parent.children = allChildren.Where(c => parent.Id == c.ParentId).ToList();
allParents.Add(parent);
}
Это может быть проще, чтобы улучшить поскольку данные индексируются ParentId ...
Я загрузил родителей в «Словарь» и использовал это в вашем цикле вместо запроса Linq. –
juharr
Ключ == 'Parent.Id'? Почему это было бы лучше? –
Поиск родителя из словаря будет более эффективным, чем запрос Linq, потому что он даст вам постоянный поиск по времени, когда запрос Linq является линейным поиском по времени. – juharr