2016-07-22 4 views
0

Ich habe eine Dienstprogrammklasse mit einem Mitglied, das eine iEnumerable<SelectListItem> zurückgibt. Die Daten werden von der Elementfunktion erfolgreich zurückgegeben, aber ich muss optionale Logik einschließen, um Value auf einen Indexwert und nicht auf einen von der DB zurückgegebenen Wert festzulegen.Ersatz SelectListItem Wert bedingt in Lambda

beispielsweise die folgenden (Teil-) Datenbankzeile angegeben:

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

und die folgende 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(); 

Die oben zurückkehrt, wie erwartet.

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

Aber ich habe eine Notwendigkeit, um den Wert zu einem nummerierten Index optional Folgendes zurück:

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

Wie modifiziere ich die oben Lambda dies zu erreichen? Kann es innerhalb des Lambda als Bedingung gemacht werden oder müssen zwei Lambda-Ausdrücke innerhalb einer Bedingung if sein?

Antwort

1

Wenn Sie müssen manchmal Anzeigewert manchmal Index, dann kann man sich zuerst zurückkehrt alle in der Abfrage:

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

dann entweder im Controller oder Ansicht konvertiert es zu dem, was Sie brauchen, wie zum Wert :

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

Für Index:

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

ich nicht an all das denken hat. Es gibt mir alles, was ich brauche. – rwkiii