使用linq foreach更新2个字段

Vin*_*ala 17 c# linq

我可以一次使用linq foreach循环更新2个字段吗?示例代码段:我有一个带有Name,Email,CreateTime,LastUpdateTime字段的用户数据.我必须为所有用户重置CreateTime和LastUpdateTime.

要更新我正在使用2个电话,如下所示

users.ForEach(x => x.CreateTime= DateTime.Now.AddMonths(-1));
users.ForEach(x => x.LastUpdateTime = DateTime.Now);
Run Code Online (Sandbox Code Playgroud)

相反,我可以在一个使用linq foreach循环中做到这一点吗?

Jon*_*eet 52

好吧,首先,假设这是List<T>.ForEach,这不是使用LINQ.但是,您可以使用语句体创建lambda表达式:

users.ForEach(x => {
    x.CreateTime = DateTime.Now.AddMonths(-1);
    x.LastUpdateTime = DateTime.Now;
});
Run Code Online (Sandbox Code Playgroud)

但是,您可能希望对所有更新使用一个一致的时间:

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

users.ForEach(x => {
    x.CreateTime = createTime;
    x.LastUpdateTime = updateTime;
});
Run Code Online (Sandbox Code Playgroud)

但是,为什么你想以这种方式实现它并不是很清楚.我建议使用foreach循环代替:

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

foreach (var user in users)
{
    user.CreateTime = createTime;
    user.LastUpdateTime = updateTime;
}
Run Code Online (Sandbox Code Playgroud)

有关此问题的更多想法,请参阅Eric Lippert 关于foreachvsForEach博文.


Vla*_*lad 8

它实际上不是linq,但你可以试试

users.ForEach(x => { x.CreateTime = DateTime.Now.AddMonths(-1);
                     x.LastUpdateTime = DateTime.Now; });
Run Code Online (Sandbox Code Playgroud)