Como não encontrei aqui a resposta que considero a melhor solução, aqui do meu jeito:
É possível usar "Selecionar" para modificar dados, mas apenas com um truque. De qualquer forma, "Selecionar" não é feito para isso. Ele apenas executa a modificação quando usado com "ToList", porque o Linq não é executado antes que os dados sejam necessários. De qualquer forma, a melhor solução é usar "foreach". No código a seguir, você pode ver:
class Person
{
public int Age;
}
class Program
{
private static void Main(string[] args)
{
var persons = new List<Person>(new[] {new Person {Age = 20}, new Person {Age = 22}});
PrintPersons(persons);
//this doesn't work:
persons.Select(p =>
{
p.Age++;
return p;
});
PrintPersons(persons);
//with "ToList" it works
persons.Select(p =>
{
p.Age++;
return p;
}).ToList();
PrintPersons(persons);
//This is the best solution
persons.ForEach(p =>
{
p.Age++;
});
PrintPersons(persons);
Console.ReadLine();
}
private static void PrintPersons(List<Person> persons)
{
Console.WriteLine("================");
foreach (var person in persons)
{
Console.WriteLine("Age: {0}", person.Age);
;
}
}
}
Antes de "foreach", você também pode fazer uma seleção linq ...