2016-07-22 64 views
0

我有一個工具類,其成員返回iEnumerable<SelectListItem>。數據由成員函數成功返回,但我需要包含可選邏輯,以將Value設置爲索引值而不是從數據庫返回的值。在Lambda中有條件地替換SelectListItem值

例如,給定以下的(局部的)數據庫的行:

Key   Value  Group 
-----  -----  ------ 
black  Black  colors 
red   Red   colors 
white  White  colors 
blue   Blue   colors 
orange  Orange  colors 

和以下LAMBDA:

private ProgramDbContext _context = new ProgramDbContext(); 

// Get available options for this design parameter 
IEnumerable<SelectListItem> defaultchoices = _context.Settings 
    .Where(dc => dc.Group == "colors") 
    .Select(dc => new SelectListItem { Text = dc.Key, Value = dc.Value }) 
    .ToList(); 

上述返回按預期方式。

Value  Text 
-----  ----- 
black  Black 
red   Red 
white  White 
blue   Blue 
orange  Orange 

但我有一個需要可選的值設置爲一個編號索引返回如下:

Value  Text 
-----  ----- 
0   Black 
1   Red 
2   White 
3   Blue 
4   Orange 

如何修改上面的lambda來做到這一點?它可以在Lambda中作爲條件來完成,還是需要在條件if內有兩個Lambda表達式?

回答

1

如果需要,有時顯示值有時指數,那麼你可以先返回他們都在詢問:在控制器

var defaultchoices = _context.Settings 
    .Where(dc => dc.Group == "colors") 
    .Select((dc, i) => new { Index = i, Text = dc.Key, Value = dc.Value }) 
    .ToList(); 

然後一方或查看其轉換成你所需要的,如價值:

var selectListItems = defaultchoices.Select(c => new SelectListItem { Text = c.Key, Value = c.Value }); 

對於指數:

var selectListItems = defaultchoices.Select(c => new SelectListItem { Text = c.Key, Value = c.Index}); 
+0

我沒想到這在所有。它給了我我需要的一切。 – rwkiii