628 Stimmen

Aktualisieren aller Objekte in einer Sammlung mit LINQ

Gibt es eine Möglichkeit, die folgenden mit LINQ zu tun?

foreach (var c in collection)
{
    c.PropertyToSet = value;
}

Um zu verdeutlichen, möchte ich durch jedes Objekt in einer Auflistung iterieren und dann eine Eigenschaft auf jedes Objekt aktualisieren.

Mein Anwendungsfall ist, dass ich eine Reihe von Kommentaren zu einem Blogeintrag habe, und ich möchte jeden Kommentar zu einem Blogeintrag durchgehen und die Datumszeit des Blogeintrags auf +10 Stunden setzen. Ich könnte es in SQL tun, aber ich möchte es in der Geschäftsschicht behalten.

993voto

Cameron MacFarland Punkte 67889

Sie können zwar eine ForEach Erweiterungsmethode, wenn Sie nur den Rahmen verwenden möchten, können Sie Folgendes tun

collection.Select(c => {c.PropertyToSet = value; return c;}).ToList();

El ToList wird benötigt, um die Auswahl sofort zu bewerten, da faule Bewertung .

458voto

Ε Г И І И О Punkte 9264
collection.ToList().ForEach(c => c.PropertyToSet = value);

83voto

Rahul Punkte 991

Ich tue dies

Collection.All(c => { c.needsChange = value; return true; });

31voto

lomaxx Punkte 108937

Ich habe tatsächlich eine Erweiterungsmethode gefunden, die genau das tut, was ich will

public static IEnumerable<T> ForEach<T>(
    this IEnumerable<T> source,
    Action<T> act)
{
    foreach (T element in source) act(element);
    return source;
}

26voto

Hennish Punkte 685

Utilizar:

ListOfStuff.Where(w => w.Thing == value).ToList().ForEach(f => f.OtherThing = vauleForNewOtherThing);

Ich bin nicht sicher, ob dies LINQ überstrapaziert oder nicht, aber es hat für mich gearbeitet, wenn eine bestimmte Elemente in der Liste für eine bestimmte Bedingung zu aktualisieren möchten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X