2012-03-27 15 views
8

Tengo un método que devuelve una nueva lista (que se refiere a una respuesta de opción múltiple):LINQ DONDE método modifica colección de origen

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

Si examino el resultado de este método - Veo los datos correctos, p.ej Rojo = False, Verde = True, Azul = False

entonces trato de filtrar el resultado devuelto utilizando el LINQ Dónde método de extensión:

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

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

Cuando materializo Tmpa, 2 cosas:

  1. Los datos en la lista SOURCE cambian - Ej. red = true, Verde = Es cierto, azul = True
  2. Los datos de Tmpa se establece en los mismos datos erróneos que la lista de origen se ha cambiado a

¿Alguna idea?

+6

Cuelga la cabeza en la vergüenza ... comienza a llenar el formulario de solicitud de personal de MacDonalds – RobD

+0

Como un lado, su código de error no altera la colección de origen; en realidad está alterando los elementos almacenados en la colección. Esta es una diferencia sutil pero importante. – phoog

Respuesta

14

Es necesario utilizar == y no =:

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

Así que cuando la búsqueda de condiciones, que fueron los valores de ajuste. Este es un error común, me enamoro de ella, así :)

7

su línea

opt => opt.Selected = true 

necesita otro signo igual:

opt => opt.Selected == true 
4

¿Quieres opt.Selected == true. Tiene un solo =

0

cambie = a == en su código linq.