Обновить 2 поля, используя linq foreach

Можно ли обновить 2 поля с помощью linq foreach loop сразу? Пример фрагмента:  У меня есть userdata с полями Name, Email, CreateTime, LastUpdateTime.  Я должен reset CreateTime и LastUpdateTime для всех пользователей.

Чтобы обновить, я использую 2 вызова ниже

users.ForEach(x => x.CreateTime= DateTime.Now.AddMonths(-1));
users.ForEach(x => x.LastUpdateTime = DateTime.Now);

вместо этого я могу сделать это в одном, используя linq foreach loop?

Ответы

Ответ 1

Хорошо, если предположить, что это List<T>.ForEach, это не использует LINQ. Но да, вы можете создать лямбда-выражение, используя тело оператора:

users.ForEach(x => {
    x.CreateTime = DateTime.Now.AddMonths(-1);
    x.LastUpdateTime = DateTime.Now;
});

Однако вы также можете использовать одно согласованное время для всех обновлений:

DateTime updateTime = DateTime.Now;
DateTime createTime = updateTime.AddMonths(-1);

users.ForEach(x => {
    x.CreateTime = createTime;
    x.LastUpdateTime = updateTime;
});

Не совсем понятно, почему вы хотите достичь этого таким образом. Вместо этого я предложил бы использовать цикл foreach:

DateTime updateTime = DateTime.Now;
DateTime createTime = updateTime.AddMonths(-1);

foreach (var user in users)
{
    user.CreateTime = createTime;
    user.LastUpdateTime = updateTime;
}

Подробнее см. Eric Lippert сообщение в блоге foreach vs foreach.

Ответ 2

На самом деле это не linq, но вы можете попробовать

users.ForEach(x => { x.CreateTime = DateTime.Now.AddMonths(-1);
                     x.LastUpdateTime = DateTime.Now; });