我有一个实用程序类,其成员返回iEnumerable<SelectListItem>
。成功函数成功返回数据,但我需要包含可选逻辑,以将Value
设置为索引值,而不是从db返回的值。
例如,给定以下(部分)数据库行:
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设置为带编号的索引以返回以下内容:
Value Text
----- -----
0 Black
1 Red
2 White
3 Blue
4 Orange
如何修改上述Lambda来实现此目的?可以在Lambda中作为条件完成,还是在条件if
中需要有两个Lambda表达式?
答案 0 :(得分:1)
如果您有时需要显示值有时索引,那么您可以先在查询中返回它们:
var defaultchoices = _context.Settings
.Where(dc => dc.Group == "colors")
.Select((dc, i) => new { Index = i, Text = dc.Key, Value = dc.Value })
.ToList();
然后在Controller或View中将其转换为您需要的内容,例如值:
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});