LINQ WHERE方法改变源集合

时间:2012-03-27 13:50:46

标签: c# linq collections

我有一个返回新列表的方法(它与多项选择答案有关):

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时,会发生两件事:

  1. SOURCE列表中的数据发生变化 - 例如红色=真,绿色= True,Blue = True
  2. tmpA中的数据设置为相同的错误数据 源列表已更改为
  3. 有什么想法吗?

4 个答案:

答案 0 :(得分:14)

您需要使用==而不是=

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

因此,当您搜索条件时,您正在设置值。 这是一个常见的错误,我也会这样做:)

答案 1 :(得分:7)

你的行

opt => opt.Selected = true

需要另一个等号:

opt => opt.Selected == true

答案 2 :(得分:4)

你想要opt.Selected == true。您有一个=

答案 3 :(得分:0)

在您的linq代码中将=更改为==