我有一个返回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。有点难以理解这种方式。
答案 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