2014-01-30 78 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