List<BlueprintLink> blueprintLinks = new List<BlueprintLink>();
BlueprintLink parentBlueprintLink = db.BlueprintLinks.FirstOrDefault(m=>m.BlueprintId == helper.BlueprintId && m.ProductId == product.Id);
blueprintLinks.Add(parentBlueprintLink);
foreach (var blLink in blueprintLinks.ToArray())
{
List<BlueprintLink> _blueprintLinks = db.BlueprintLinks.Where(m=>m.ParentId == blLink.BlueprintId && m.ProductId == blLink.ProductId).ToList();
blueprintLinks.AddRange(_blueprintLinks);
}
List<BlueprintLink> blueprintLinks = new List<BlueprintLink>();
BlueprintLink parentBlueprintLink = db.BlueprintLinks.FirstOrDefault(m=>m.BlueprintId == helper.BlueprintId && m.ProductId == product.Id);
blueprintLinks.Add(parentBlueprintLink);
foreach (var blLink in blueprintLinks.ToArray()) // .ToArray() создаёт копию blueprintLinks, в котором будет один добавленный элемент на предыдущей строчке
{
List<BlueprintLink> _blueprintLinks = db.BlueprintLinks.Where(m=>m.ParentId == blLink.BlueprintId && m.ProductId == blLink.ProductId).ToList();
blueprintLinks.AddRange(_blueprintLinks); // добавляем новые элементы в оригинальный список
} // выходим из цикла потому что в копии сделанной ToArray всего один элемент
var blueprintLinks = new List<BlueprintLink>();
blueprintLinks.Add(db.BlueprintLinks.First(m => m.BlueprintId == helper.BlueprintId && m.ProductId == product.Id));
for(int i = 0; i < blueprintLinks.Count; i++) // Идём по оригинальному списку от 0 до конца
{
blueprintLinks.AddRange(db.BlueprintLinks.Where(m => m.ParentId == blLink.BlueprintId && m.ProductId == blLink.ProductId)); // добавляем новые элементы в список
} // blueprintLinks.Count увеличился на кол-во добавленных элементов и есть куда идти дальше