This:
var result = GetMappedData(companies);
сохраняет запрос в переменную result
, а не результаты запроса. Это связано с тем, что GetMappedData
возвращает запрос для начала, а не объект, который реализует интерфейс IEnumerable
(например, List
).
В следующей строке цикл foreach
перечисляет запростаким образом, запрос, наконец, начинает выполняться. Он успешно изменяет свойство HasChildrens
каждого элемента, но сама последовательность никуда не денется.
На следующей строке вы возвращаете result
, что, опять же, является запросом, а не результатомзапрос. Когда вызывающий GetCompanies()
пытается перечислить этот запрос, он снова начинает перечисление, создавая новую последовательность различных экземпляров CompDTO
, и на этот раз нет цикла foreach
для их изменения перед продолжением, поэтому вы наблюдаетезначение свойства как false
.
Материализуйте свой запрос при первом вызове:
var result = GetMappedData(companies).ToList();