2012-03-27 15 views
8

मैं एक विधि है कि एक नई सूची (यह एक बहु विकल्प जवाब से संबंधित है) देता है:LINQ जहां विधि बदल स्रोत संग्रह

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 अमल में लाना, 2 बातें होती हैं:

  1. SOURCE सूची में डेटा बदलता है - उदा। लाल = यह सच है, ग्रीन = यह सच है, ब्लू = सच
  2. tmpA में डेटा है कि स्रोत सूची

कोई भी विचार करने के लिए बदल दिया गया है एक ही गलत डेटा पर सेट है?

+6

शर्म में सिर लटकाता है ... मैकडॉनल्ड्स स्टाफ आवेदन फॉर्म भरना शुरू होता है – RobD

+0

एक तरफ, आपका बग्गी कोड स्रोत संग्रह में परिवर्तन नहीं करता है; यह वास्तव में संग्रह में संग्रहीत वस्तुओं को बदल रहा है। यह एक सूक्ष्म लेकिन महत्वपूर्ण अंतर है। – phoog

उत्तर

14

आप == और नहीं = उपयोग करने की आवश्यकता:

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

तो तुम हालत की खोज करते हैं, तो आप मान सेट किया गया। यह एक आम गलती है, मैं भी इसके लिए गिर :)

7

अपनी लाइन

opt => opt.Selected = true 

की जरूरत है एक और बराबर चिह्न:

opt => opt.Selected == true 
4

आप opt.Selected == true चाहते हैं। आपके पास एक सिंगल =

0

= से == को अपने linq कोड में बदलें।

संबंधित मुद्दे