Вы должны отладить вашу программу и убедиться, что вы на самом деле попадаете внутрь if
и устанавливаете свойство.Если нет, то это будет абсолютно нулевым.Но учтите, что вы все равно делаете что-то опасное, закрывая переменную цикла.
IEnumerable<Publication> eChildrens =
children.OfType<Publication>().Where(ep =>
ep.ParentID.Equals(e.PublicationId));
if (eChildrens.Count() > 0)
{
e.ChildPublication = eChildrens;
}
eChildrens
- это лениво вычисленный запрос, который захватывает переменную цикла e
.Когда вы выходите за пределы запроса и пытаетесь использовать результаты, если у вас нет странных ожиданий, ваш код не будет выполнять то, что вы хотите.В заключение, это переменная , которая захватывается, поэтому ваш запрос всегда будет смотреть на тот же var e
, когда вы выйдете за пределы цикла.У вас будет много объектов, которые смотрят на неправильные последовательности ChildPublication
.
Чтобы избежать этой проблемы, либо создайте локальную временную переменную внутри цикла и закройте ее
var temp = e; // local temporary variable, used below
IEnumerable<Publication> eChildrens =
children.OfType<Publication>().Where(ep =>
ep.ParentID.Equals(temp.PublicationId));
if (eChildrens.Count() > 0)
{
e.ChildPublication = eChildrens;
}
Или поочередно форсируйте оценку запроса, вызывая метод, такой как ToList();
IEnumerable<Publication> eChildrens =
children.OfType<Publication>().Where(ep =>
ep.ParentID.Equals(e.PublicationId)).ToList();
if (eChildrens.Count() > 0)
{
e.ChildPublication = eChildrens;
}
. Подробнее об этой теме читайте в записи в блоге Эрика Липперта .
.