2010-05-03 4 views
12

Je souhaite mettre dans une liste sélectionnée les noms et prénoms des personnes d'un modèle EF. J'ai essayé avec ceci:Comment combiner deux champs dans une description de texte SelectList?

public ActionResult Insert() 
     { 
      ViewData["accountlist"] = new SelectList(time.Anagrafica_Dipendente.ToList(), "ID_Dipendente", "Surname Name", null);    
      Giustificativi g = new Giustificativi(); 
      return View(g); 
     } 

mais VS renvoie une erreur, parce qu'il n'y a pas un attribut appelé « nom de famille ». comment puis-je concaténer le nom et le prénom dans l'étiquette de liste de sélection?

grâce

Répondre

40

vous pourriez faire quelque chose comme ceci:

ViewData["accountlist"] = 
    new SelectList((from s in time.Anagrafica_Dipendente.ToList() select new { 
     ID_Dipendente=s.ID_Dipendente, 
     FullName = s.Surname + " " + s.Name}), 
     "ID_Dipendente", 
     "FullName", 
     null); 
+1

Cette technique permet également de combiner des propriétés de différents objets liés. par exemple 'FullName = s.Parent.Surname + s.Name' – Josh

26

Ajouter une nouvelle propriété à time.Anagrafica_Dipendente qui représentera la concaténation des deux propriétés:

public string Fullname 
{ 
    get 
    { 
     return string.Format("{0} {1}", Surname, Name); 
    } 
} 

puis utilisez cette :

ViewData["accountlist"] = new SelectList(
    time.Anagrafica_Dipendente.ToList(), 
    "ID_Dipendente", 
    "Fullname", 
    null 
); 

Mise à jour: A partir de C# 6.0, la propriété peut être de façon plus concise écrit:

public string Fullname => string.Format("{0} {1}", Surname, Name); 

En savoir plus sur les propriétés d'expression valides here.

+1

Pour que cela fonctionne,' Fullname' devrait être membre de 'time.Anagrafica_Dipendente'. –

+0

Oui c'est correct. J'aurais dû préciser cela. –

+0

Je ne peux pas croire que je ne pouvais pas penser à ça moi-même, simple et élégant, j'adore! – Ben