2016-07-22 2 views
0

iEnumerable<SelectListItem>を返すメンバーを持つユーティリティクラスがあります。データはメンバー関数によって正常に返されますが、オプションのロジックを組み込んでValueをdbから返される値ではなくインデックス値に設定する必要があります。代用SelectListItem条件付きでラムダ内の値

例えば、以下の(部分的な)データベース行所与:

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

、次ラムダ:

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 

は、どのように私はこれを達成するためにラムダの上に修正していますか?ラムダ内で条件付きで行うことはできますか?または条件付きif内で2つのラムダ式を使用する必要がありますか?

答えて

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

関連する問題