Вы перечисляете result
каждый раз, когда перечисляете возврат IEnumerable
из DoStuff
, плюс одно дополнительное время внутри цикла в самом DoStuff
. Изменения, которые вы делаете внутри цикла, не остаются, однако, из-за отложенного выполнения : при следующем перечислении DoStuff()
будет другой вызов DoOtherStuff
и т. Д.
Вы можете исправить это несколькими способами:
Преобразовать result
в список перед сортировкой дочерних элементов, т.е.
DoOtherStuff() // Returns IEnumerable<Parent>
.OrderByDescending(SomePredicate)
.ThenBy(AnotherPredicate)
.ToList();
Добавить дочернюю сортировку в Select
:
DoOtherStuff() // Returns IEnumerable<Parent>
.Select(parent => {
parent.Children = parent.Children.OrderBy(YetAnotherPredicate).ToList();
return parent;
})
.OrderByDescending(SomePredicate)
.ThenBy(AnotherPredicate)
.ToList();
Используйте yield return result
в цикле (это вариант решения Select
).