2010-05-03 22 views
12

Quiero poner en una lista seleccionada las etiquetas del nombre y apellido de las personas de un modelo EF. He intentado con esto:¿Cómo puedo combinar dos campos en una descripción de texto SelectList?

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

pero VS devuelve un error, porque no es un atributo llamado "nombre apellido". ¿cómo puedo incluir el nombre y apellido en la etiqueta de la lista de selección?

gracias

Respuesta

40

se podría hacer algo como esto:

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

Esta técnica también permite combinar propiedades de diferentes objetos vinculados. por ejemplo 'FullName = s.Parent.Surname + s.Name' – Josh

26

añadir una nueva propiedad a time.Anagrafica_Dipendente que representará la concatenación de las dos propiedades:

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

y luego utilizar este :

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

Actualización: A partir de C# 6.0, la propiedad puede ser más concisa escrita como:

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

Más información acerca de las propiedades de expresión de cuerpo here.

+1

Para que eso funcione,' Fullname' debería ser un miembro de 'time.Anagrafica_Dipendente'. –

+0

Sí, eso es correcto. Debería haber especificado esto. –

+0

No puedo creer que no pudiera pensar en mi yo, simple y elegante, ¡me encanta! – Ben

Cuestiones relacionadas