在Lambda

时间:2016-07-22 14:11:45

标签: c# lambda

我有一个实用程序类,其成员返回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表达式?

1 个答案:

答案 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});