LINQ WHERE метод изменяет исходную коллекцию - PullRequest
8 голосов
/ 27 марта 2012

У меня есть метод, который возвращает новый список (это относится к ответу с несколькими вариантами ответов):

public static List<questionAnswer> GetAnswersWithSelections(this Questions_for_Exam__c question)
        {
            List<questionAnswer> answers = new List<questionAnswer>();

            answers.Add(new questionAnswer() { Ordinal = 1, AnswerText = question.AN1__c, Selected = (bool)question.Option1__c });

            ...

            return answers;
        }

Если я проверю результат этого метода - я увижу правильные данные, например, Красный = Ложь, Зеленый = Правда, Синий = Ложь

Затем я пытаюсь отфильтровать возвращаемый результат, используя метод расширения LINQ Where:

List<questionAnswer> CorrectSelections = question.GetAnswersWithSelections();

var tmpA = CorrectSelections.Where(opt => opt.Selected = true);

Когда я материализую tmpA, происходят 2 вещи:

  1. Данные в списке SOURCE изменяются - например, Красный = Правда, Зеленый = True, Blue = True
  2. Данные в tmpA установлены на те же неверные данные что список источников был изменен на

Есть идеи?

Ответы [ 4 ]

14 голосов
/ 27 марта 2012

Вам нужно использовать ==, а не =:

var tmpA = CorrectSelections.Where(opt => opt.Selected == true);

Итак, когда вы искали условие, вы устанавливали значения. Это распространенная ошибка, я тоже влюбляюсь в нее :)

7 голосов
/ 27 марта 2012

вашей линии

opt => opt.Selected = true

нужен еще один знак равенства:

opt => opt.Selected == true
4 голосов
/ 27 марта 2012

Вы хотите opt.Selected == true. У вас есть один =

0 голосов
/ 27 марта 2012

измените = на == в вашем коде linq.

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