LINQ gebruiken om een ​​eigenschap in een lijst met entiteiten bij te werken

Stel dat ik een entiteit heb die er ongeveer zo uitziet als dit eenvoudige voorbeeld:

MyEntity 
{
   int property1;
   int property2;
   int property3;
}

Veronderstel nu dat ik een IEnumerablelijst van deze entiteiten heb. Is er een LINQ-query die ik kan uitvoeren en die de waarde van property1op 100 zou zetten voor elke entiteit in de lijst? Ik weet dat ik dit via een foreach kan doen, maar vroeg me af of LINQ dit op een elegantere manier zou kunnen doen.


Antwoord 1, autoriteit 100%

Zoals dit:

var result = GetMyIEnumerable()
                .ToList();
result.ForEach(x => x.property1 = 100);

Antwoord 2, autoriteit 13%

Voor Darin’s punt is LINQ gebouwd voor query’s. Ik ben bij het werken met LINQ in de gedachte gekomen dat objecten die worden opgevraagd als onveranderlijk moeten worden behandeld. De operator Selectis echter ook geweldig voor transformaties.

U kunt uw probleem dus oplossen door als volgt van de ene set naar de andere te transformeren:

var result = myEntityCollection.Select(e => {
   var ret = e;
   e.property1 = 100;
   return e; });

De items in de originele collectie zijn onaangeroerd, maar de items in het resultaat hebben nu allemaal eigenschap1 ingesteld op 100.


Antwoord 3, autoriteit 12%

Hier zijn twee oplossingen waarvan ik vond dat ze voor mij werkten.

result = result.Where(x => (x.property1 = 100) == 100).ToList();

of

result = result.Select(c => { c.property1 = 100; return c; }).ToList();

Antwoord 4, autoriteit 3%

Als je 100 eigendommen hebt, zou reflectie misschien het meest elegant zijn. LINQ’s voor vragen die niet worden bijgewerkt.


Antwoord 5

Naast Darrelken mkedobbs, VB.NET Code:

object.list =
    object.list.Select(Function(x)
                           x.property = If(x.property.Length > 3, x.property.Substring(0, 3), x.property)
                           Return x
                       End Function).ToList()

Other episodes