在LINQ中相互排除属性

时间:2011-06-30 13:58:27

标签: .net linq

我有一个列表,其中有一个“活动”属性,我想将其设置为1仅限于一个项目,并设置为0到所有其他项目。

在Linq中哪种方式最聪明?我知道我可以将所有项目设置为0,然后将1设置为当前,但我问是否有更好的方法来执行此操作。

谢谢!!侨

3 个答案:

答案 0 :(得分:4)

我不确定LINQ在这里特别有用......怎么样:

foreach (var item in list)
{
    item.Active = (item == desiredActiveItem ? 1 : 0);
}

答案 1 :(得分:2)

我同意Jon的观点,但如果你想使用LINQ,你可以这样做:

list = list.Select(i => { i.Active = (i == desiredActiveItem ? 1 : 0); 
                          return i; }).ToList();

这表明在这里不使用LINQ确实是个好主意。

答案 2 :(得分:1)

作为对Daniel的回应,如果你必须使用linq,那只是一种变态。至少只是用它来找到该项目,然后采取行动。

var item = list.FirstOrDefault**(i => i == desired);

if (item != null)
{
    item.Active = true;
}

**可能会更改为FirstSingleSingleOrDefault,具体取决于列表的性质。