使用linq设置多个值

时间:2017-05-12 06:49:32

标签: c# linq

请参阅另一篇文章:assign value using linq

通过此表达式,我们可以更新列表中多个项目中的一个值:

listOfCompany.Where(c=> c.id == 1).ToList().ForEach(cc => cc.Name = "Whatever Name");

是否可以更新多个值?实现foreach结构并在其中设置多个值是否更有效?

5 个答案:

答案 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'];