2013-08-23 9 views
6

Come impostare più valori di un oggetto lista, sto seguendo il comando ma fallisce.Come impostare più valori in una lista usando l'espressione lambda?

objFreecusatomization 
.AllCustomizationButtonList 
.Where(p => p.CategoryID == btnObj.CategoryID && p.IsSelected == true && p.ID == btnObj.ID) 
.ToList() 
.ForEach(x => x.BtnColor = Color.Red.ToString(), ); 

Alla fine dopo la virgola voglio impostare un altro valore. Quale dovrebbe essere l'espressione, anche se ho un solo record rilevante.

+2

Non abusare LINQ per modificare la raccolta. È uno strumento di query. Il tuo approccio non è più leggibile di un 'foreach', ma è molto meno efficiente. –

+0

Quindi dovrebbe essere un'espressione lamda che può funzionare? o in qualsiasi altro modo, o ho bisogno di loop dopo aver preso oggetto. – NoviceToDotNet

risposta

12

Beh personalmente non vorrei scrivere il codice in questo modo comunque - ma si può semplicemente utilizzare un statement lambda:

Un lambda dichiarazione assomiglia a una lambda espressione eccezione del fatto che la dichiarazione (s) è racchiuso in bretelle

Il corpo di una dichiarazione lambda può essere costituito da un numero qualsiasi di affermazioni; tuttavia, in pratica, in genere non ci sono più di due o tre.

Quindi la chiamata ForEach sarebbe simile a questa:

.ForEach(x => { 
    x.BtnColor = Color.Red.ToString(); 
    x.OtherColor = Color.Blue.ToString(); 
}); 

vorrei scrivere un foreach ciclo invece però:

var itemsToChange = objFreecusatomization.AllCustomizationButtonList 
    .Where(p => p.CategoryID == btnObj.CategoryID 
       && p.IsSelected 
       && p.ID == btnObj.ID); 

foreach (var item in itemsToChange) 
{ 
    item.BtnColor = Color.Red.ToString(); 
    item.OtherColor = Color.Blue.ToString(); 
} 

(È possibile inline la query nella dichiarazione foreach stesso, ma personalmente trovo l'approccio di cui sopra utilizzando un separatore di variabili locali separato.)

+0

Ma sono sicuro che la lista manterrà un record, quindi ho bisogno di looparlo con foreach.? – NoviceToDotNet

+1

@NoviceToDotNet: se sei sicuro che avrà solo un record, dovresti usare i metodi come 'FirstOrDefault',' First', 'SingleOrDefault', o' Single' (a seconda di quale sia più applicabile) piuttosto che creare un elenco . –

+2

@NoviceToDotNet: questo è il primo che hai menzionato in cui esiste una sola corrispondenza. Come intendevamo saperlo? Il tuo codice originale era in loop (con 'ForEach'), quindi ho naturalmente pensato che * avessi bisogno * di eseguire il ciclo. –

Problemi correlati