2012-03-27 27 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代碼。