如何设置列表元素的属性与LINQ
问题描述:
我有它返回列表(角色ID,姓名)的方法,我需要将其转换成一个列表(MyRole有标识,名称,选择)如何设置列表元素的属性与LINQ
var y = x.Roles.Select(r => new MyRole(r.Name, r.Id, false));
好吧,到目前为止这么好。但是现在我需要将ID = 123的元素的“selected”属性更改为true。这种做法很难实现。
答
var y = x.Roles.Select(r => new MyRole(r.Name, r.Id, r.ID == 123));
这是以评估在每次迭代平等的成本,但如果你绝对想拥有一个LINQ查询之类的非常小的性能损失可能不会打扰你太过分了!
答
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