2014-01-30 46 views
0

我有它返回列表(角色ID,姓名)的方法,我需要将其转换成一个列表(MyRole有标识,名称,选择)如何设置列表元素的属性与LINQ

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

好吧,到目前为止这么好。但是现在我需要将ID = 123的元素的“selected”属性更改为true。这种做法很难实现。

回答

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

这是以评估在每次迭代平等的成本,但如果你绝对想拥有一个LINQ查询之类的非常小的性能损失可能不会打扰你太过分了!

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