2012-03-27 76 views
8

我有一个返回一个新的列表(它涉及到选择题的答案)的方法:LINQ WHERE方法改变源集合

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筛选返回的结果,其中扩展方法:

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

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

当我兑现TMPA,两件事情发生:

  1. SOURCE列表中的数据发生变化 - 例如红色=真,绿色= 真,蓝=真
  2. 在TMPA的数据被设置为相同的错误数据 的源列表已更改为

任何想法?

+6

把头埋在耻辱......开始填写麦当劳员工申请表 – RobD 2012-03-27 13:58:43

+0

顺便说一句,你的错误代码不会改变源收集;它实际上正在改变存储在集合中的项目。这是一个微妙而重要的区别。 – phoog 2012-03-27 14:07:37

回答

14

您需要使用==,而不是=

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

所以,当你搜索条件,你的设定值。 这是一个常见的错误,我爱上它,以及:)

7

你行

opt => opt.Selected = true 

需要另一个等号:

opt => opt.Selected == true 
4

你想opt.Selected == true。您有一个单独的=

0

更改===在您的linq代码。