IEnumerator, похоже, влияет на все объекты, а не по одному - PullRequest
0 голосов
/ 10 июня 2010

Эй, я пытаюсь изменить атрибут объекта. Я устанавливаю это значение того же атрибута, хранящегося в другой таблице. Между двумя есть отношения один ко многим. Конец продукта один, а версий много. Прямо сейчас оба эти метода, которые я попробовал, установили все возвращаемые продукты равными объекту окончательной версии. Итак, в этом случае они все одинаковы. Я не уверен, где проблема лежит. Вот мои два фрагмента кода, оба дают одинаковый результат.

            int x = 1
            IEnumerator<Product> ie = productQuery.GetEnumerator();
            while (ie.MoveNext())
            {
                ie.Current.RSTATE = ie.Current.Versions.First(o => o.VersionNumber == x).RSTATE;
                x++;
            }

и

             foreach (var product in productQuery)
            {

                product.RSTATE = product.Versions.Single(o => o.VersionNumber == x).RSTATE;
                x++;
            }

Таблица версий содержит информацию о предыдущих продуктах, каждый из которых отличается номером версии. Я знаю, что он начинается с 1 и продолжается до текущей версии, основываясь на моем запросе, возвращающем правильное количество продуктов.

Спасибо за любой совет.

Ответы [ 2 ]

1 голос
/ 10 июня 2010

Похоже, что вы создаете замыкание для переменной x в лямбда-выражении, но немного странно, что у вас возникают проблемы с ним, потому что вы сразу выполняете лямбда-выражение - отсрочки нетэффект выполнения здесь, который обычно был бы источником проблем с закрытием.

Тем не менее, есть один способ проверить, является ли закрытие причиной проблемы - попробуйте взять копию переменной x внутри цикла и посмотреть, решит ли это проблему, например:

foreach (var product in productQuery)
{
    int y = x;
    product.RSTATE = product.Versions.Single(o => o.VersionNumber == y).RSTATE;
    x++;
}

Кроме того, я подозреваю, что вы могли бы избежать всего цикла (и, следовательно, проблемы) с проекцией .Select(), но поскольку объект вашего продукта был изменен, это будет немного сложнее.

0 голосов
/ 10 июня 2010

Хорошо, очевидно, он изменяет все из них, потому что продукт имеет уникальный столбец Identity, поэтому, когда я изменяю один его экземпляр, он изменяет их все.Итак, похоже, что он вернулся к чертежной доске.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...