Итак, у меня есть куча UltraTreeNodes. Я пытаюсь перебрать их и назначить LINQ-запрос свойству Tag, который будет выполнен позже, когда пользователь щелкнет узел. Единственное, что изменяется в запросе для каждого узла, - это переменная в предложении where. Однако при щелчке по узлу и окончательном выполнении запроса из тега он всегда использует запрос (и его переменную), который был назначен последним в цикле foreach.
Это ведет себя так, потому что все теги ссылаются на один и тот же запрос, то есть то же самое, где переменная назначается снова и снова? Есть ли способ избежать такого поведения без необходимости на лету создавать предикаты и передавать их?
ОБНОВЛЕНИЕ. Извините, вот код:
var query = from result in results
where result.SchedulingStatus != SchedulerRunStatus.Scheduled
group result by result.UserId into users
select new {users.Key, Count = users.Count()};
foreach (var user in query)
{
UltraTreeNode efdUserNode = new UltraTreeNode();
efdUserNode.Text = user.Key + " (" + user.Count + ")";
efdUserNode.Key = user.Key;
IEnumerable<DownloadResultSummary> nodeQuery = from result in efdDetail.DownloadResultSummaries
where
result.SchedulingStatus != SchedulerRunStatus.Scheduled &
result.UserId == user.Key
select result;
efdUserNode.Tag = nodeQuery;
efdUserNode.Override.NodeAppearance.Image = Properties.Resources.user;
this.efdNode.Nodes.Add(efdUserNode);
}