使用linq foreach更新2个字段

时间:2012-06-11 09:14:07

标签: c# linq

我可以一次使用linq foreach循环更新2个字段吗? 示例代码段:  我有一个userdata,其中包含Name,Email,CreateTime,LastUpdateTime字段。  我必须为所有用户重置CreateTime和LastUpdateTime。

要更新,我正在使用以下两个电话

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

相反,我可以在一个使用linq foreach循环中进行吗?

2 个答案:

答案 0 :(得分:49)

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

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的blog post on foreach vs ForEach以了解更多有关此事的想法。

答案 1 :(得分:8)

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

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