请参阅另一篇文章:assign value using linq
通过此表达式,我们可以更新列表中多个项目中的一个值:
listOfCompany.Where(c=> c.id == 1).ToList().ForEach(cc => cc.Name = "Whatever Name");
是否可以更新多个值?实现foreach结构并在其中设置多个值是否更有效?
答案 0 :(得分:2)
LINQ很有趣,但恕我直言,你应该尝试使用可读和可维护的代码。当您需要更新多个字段时,我会认为常规foreach
会更适合您。
foreach(var item in listOfCompany.Where(c=> c.id == 1))
{
item.Name = "Whatever Name";
item.Property = 1;
//..
}
至于它是否更有效率,我认为你不会注意到它。您可以随时学习reference source - 它基本上只为每个项目调用Action
。
答案 1 :(得分:1)
你可以这样做:
listOfCompany.Where(c=> c.id == 1).ToList().ForEach(cc =>
{
cc.Name = "Whatever Name";
cc.OtherField="Whatever field";
});
答案 2 :(得分:0)
只需使用括号:
listOfCompany.Where(c=> c.id == 1).ToList().ForEach(cc =>
{
cc.Name = "Whatever Name";
cc.Name = "Whatever Name";
cc.Name = "Whatever Name";
});
或者使用参考方法:
listOfCompany.Where(c=> c.id == 1).ToList().ForEach(UpdateCompany);
private void Function(Company cc)
{
cc.Name = "Whatever Name";
cc.Name = "Whatever Name";
cc.Name = "Whatever Name";
}
答案 3 :(得分:0)
没有ForEach
的方法,只有一次迭代而不是两次
listOfCompany = listOfCompany.Select(x => {
x.Name = x.id == 1 ? "Whatever Name" : x.Name;
x.Name2 = x.id == 1 ? "Whatever Name" : x.Name2;
return x;
}).ToList();
没有Linq的方法(可能是紧张的)
for (int i = 0; i < listOfCompany.Count; i++)
{
if (listOfCompany[i].id == 1)
{
listOfCompany[i].Name = "Whatever Name";
listOfCompany[i].Name2 = "Whatever Name";
}
}
答案 4 :(得分:0)
尝试代码 只需使用{}和每个项目结束使用;分号
extras = [selected[0], selected[1], selected[2], selected[3], 'checked'];