617 votes

Mise à jour de tous les objets dans une collection à l'aide de Linq

Est-il un moyen pour effectuer les opérations suivantes à l'aide de Linq:

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

Pour clarifier, je veux pour itérer sur chaque objet dans une collection et ensuite mettre à jour une propriété sur chaque objet.

Mon cas d'utilisation, j'ai un tas de commentaires sur un blog et je tiens à parcourir tous les commentaires sur un blog et l'ensemble de l'datetime sur le blog de +de 10 heures. Je pourrais le faire en SQL, mais je tiens à le maintenir dans la couche de gestion.

984voto

Cameron MacFarland Points 27240

Alors que vous pouvez utiliser un ForEach de la méthode d'extension, si vous voulez juste utiliser le framework que vous pouvez faire

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

Le ToList est nécessaire afin d'évaluer l'sélectionnez immédiatement en raison de l'évaluation différée.

438voto

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

85voto

Rahul Points 161

Je suis en train de faire ce

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

30voto

lomaxx Points 32540

J'ai effectivement trouvé une méthode d'extension qui permettra de faire ce que je veux bien

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

10voto

JaredPar Points 333733

Il n'est pas intégré dans l'extension de la méthode pour ce faire. Bien que la définition est assez simple. Au bas de la poste est une méthode que j'ai défini appelé Itérer. Il peut être utilisé comme

collection.Iterate(c => { c.PropertyToSet = value;} );

Itérer Source

public static void Iterate<T>(this IEnumerable<T> enumerable, Action<T> callback)
{
    if (enumerable == null)
    {
        throw new ArgumentNullException("enumerable");
    }

    IterateHelper(enumerable, (x, i) => callback(x));
}

public static void Iterate<T>(this IEnumerable<T> enumerable, Action<T,int> callback)
{
    if (enumerable == null)
    {
        throw new ArgumentNullException("enumerable");
    }

    IterateHelper(enumerable, callback);
}

private static void IterateHelper<T>(this IEnumerable<T> enumerable, Action<T,int> callback)
{
    int count = 0;
    foreach (var cur in enumerable)
    {
        callback(cur, count);
        count++;
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X