如何使用LINQ设置列表元素的属性

时间:2014-01-30 16:48:23

标签: c# linq

我有一个返回List的方法(Role有Id,Name),我需要将它转换成List(MyRole有Id,Name,选中)

var y = x.Roles.Select(r => new MyRole(r.Name, r.Id, false));

好的,到目前为止一切顺利。但是现在我需要将ID = 123的元素的“selected”属性更改为true。有点难以理解这种方式。

2 个答案:

答案 0 :(得分:4)

var y = x.Roles.Select(r => new MyRole(r.Name, r.Id, r.ID == 123));

这是以每次迭代时评估相等性为代价的,但是如果你绝对想要一个LINQ查询,那么性能非常小的打击可能不会给你太多打扰!

答案 1 :(得分:4)

Linq是否查询而非更新。您需要“找到”正确的对象,然后像平常一样更新它:

var y = x.Roles.Select(r => new MyRole(r.Name, r.Id, false));
var y123 = y.Single(r => r.Id == 123);  // equivalent to Where(...).Single()
y123.Selected = true;

或者您可以使用条件语句将其烘焙到您的投影中:

var y = x.Roles.Select(r => new MyRole(r.Name, r.Id, (r.Id == 123) ? true : false));
// the ? true : false is unnecessary, just adding it here to illustrate the check