2012-03-27 9 views
8

Ich habe eine Methode, die eine neue Liste zurück (es bezieht sich auf eine Multiple-Choice-Antwort):LINQ WHERE Methode Quellensammlung verändert

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; 
     } 

Wenn ich das Ergebnis dieser Methode untersuchen - ich sehe die richtigen Daten, z.B Rot = False, Grün = True, Blau = False

ich dann versuchen, das zurückgegebene Ergebnis mit dem LINQ Wo Erweiterung Methode zu filtern:

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

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

Als ich TmpA materialisieren, 2 Dinge passieren:

  1. Die Daten in der SOURCE-Liste ändern sich - z Rot = True, Grün = Es stimmt, Blau = True
  2. Die Daten in TmpA wird auf die gleichen falschen Datensatz , dass die Quellenliste

Irgendwelche Ideen zu geändert wurde?

+6

Hängt Kopf in Schande ... beginnt MacDonalds Personalantragsformular ausfüllen – RobD

+0

Nebenbei ändert Ihr Buggy-Code nicht die Quellensammlung; Es verändert tatsächlich die in der Sammlung gespeicherten Objekte. Dies ist ein subtiler, aber wichtiger Unterschied. – phoog

Antwort

14

Sie müssen == verwenden und nicht =:

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

Also, wenn Sie für Zustand suchen, Sie Werte einstellen. Dies ist ein häufiger Fehler ist, falle ich es für so gut :)

7

Ihre Linie

opt => opt.Selected = true 

noch Gleichheitszeichen benötigt:

opt => opt.Selected == true 
4

Sie wollen opt.Selected == true. Sie haben eine einzige =

0

Änderung = zu == in Ihrem Linq-Code.