2009-01-09 88 views
1

這有點asp.net MVC僅作示例有關,但我希望能實現這樣的事情:LAMBDA的ForEach()索引位置

new SelectList(ViewData.Model.Formats.ToList().ForEach(x => index + " - " + x.Name), "ID", "Name"); 

基本上試圖將智能和回報「指標」作爲編號1 - n其中n是列表中的項目數ViewData.Model.Formats因此,我的選擇列表在每個條目上都有一個前綴#。任何簡單的方法來做到這一點,或者我正在尋找一個新的列表與附加和放棄lambda技巧?

回答

-1

與尼爾和胡沙姆很大的幫助,我得到了以下這方面的工作:

new SelectList(ViewData.Model.MessageTypeFieldFormats.Select((x, i) => new { ID = x.ID, Name = (i + 1) + " - " + x.Name }) 

匿名方法搖滾!

1

如何

int index = 0; 
new SelectList(ViewData.Model.Formats.ForEach(x => ++index + " - " + x.Name), "ID", "Name"); 

(我只是試圖與它的index。捕獲lambda表達式,我不知道其他類。)

+0

我喜歡你的風格! 然而,我似乎甚至不能分配「x.Name」ForEach(x => x.Name =「test」)返回一個錯誤。也許你不能在forEach()中重新賦值? :S – GONeale 2009-01-09 06:31:15

+0

你可以做一個任務(只要x是一個類),但我不知道ViewData.Model.Formats的結構,所以我很抱歉,我不能幫你在這裏。還要檢查Neil的答案。我認爲更好。 – 2009-01-09 06:53:14

4

你可以使用一個事實,即LINQ的選擇可以給你的每個元素的索引:

new SelectList(ViewData.Model.Formats.Select((x, i) => (i + 1) + " - " + x.Name, "ID", "Name"); 

請注意,這並不意味着任何數據庫訪問,只是標準的LINQ to Objects。