2009-11-21 6 views
29

Say Mam podmiot, który wygląda mniej więcej tak to prosty przykład:Używanie LINQ Aby zaktualizować obiekt w listę podmiotów

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

Załóżmy teraz mam IEnumerable listę tych udziałów w jednostkach. Czy istnieje kwerenda LINQ, które można wykonać, który ustawiłby wartość property1 na 100 dla każdej jednostki na liście? Wiem, że mogę to zrobić za pośrednictwem foreach, ale zastanawiałem się, czy LINQ mógłby to zrobić bardziej elegancko.

Odpowiedz

54

Jak to:

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

absolutnie fantastyczne! tak subtelny, ale potężny –

4

Jeśli masz 100 właściwości, odbicie może być najbardziej eleganckie. LINQ's for querying not updating.

4

Do punktu Darin, w LINQ jest zbudowany dla zapytań. Podczas pracy z LINQ wpadłem w sposób myślenia, że ​​obiekty będące przedmiotem zapytania powinny być traktowane jako niezmienne. Jednak operator Select jest również doskonały do ​​transformacji.

Tak, można rozwiązać problem poprzez przekształcenie z jednego zestawu do drugiego, co następuje:

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

Pozycje w oryginalnej kolekcji są nietknięte, ale pozycje w rezultacie będzie teraz wszyscy mają property1 ustawiony na 100

1

Oto dwa rozwiązania, które udało mi się znaleźć.

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

lub

result = result.Select(c => { c.property1 = 100; return c; }).ToList(); 
Powiązane problemy