How can I combine two fields in a SelectList text description?
Asked Answered
F

5

27

I want put in a selected list labels the name and surname of people of an EF model. I've tried with this:

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

but VS returns an error, because there isn't a attribute called "surname name". how can i concat the name and surname in the selectlist label?

thanks

Fifth answered 3/5, 2010 at 14:29 Comment(0)
T
59

you could do something like this:

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);
Talus answered 3/5, 2010 at 14:36 Comment(1)
This technique also allows combining properties from different linked objects. eg FullName = s.Parent.Surname + s.NameBlaise
F
36

Add a new property to time.Anagrafica_Dipendente which will represent the concatenation of the two properties:

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

and then use this:

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

Update: As of C# 6.0, the property can be more concisely written as:

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

Learn more about expression-bodied properties here.

Fechner answered 3/5, 2010 at 14:37 Comment(3)
In order for that to work, Fullname would have to be a member of time.Anagrafica_Dipendente.Pluralism
i can't believe i couldn't think of that my self, simple and elegant, love it!Otis
Or even more succinctly using public string Fullname => $"{Surname} {Name}";Materials
T
5

I was looking for this answer and my easy way is adding a NotMapped attribute, this is my code:

[NotMapped]
public string FullName
   {
     get
       {
         return Name + " " + LastName;
       }
   }

Then you can use the normal way in the controller, this is my code, Owner the the foreign key related to AspNetUsers

ViewBag.Owner = new SelectList(db.AspNetUsers, "Id", "FullName", product.Owner);
Toothbrush answered 13/12, 2018 at 14:6 Comment(0)
P
2

On view

<select asp-for="AccountId" 
            asp-items='new SelectList(from x in Accounts select new { Value = x.AccountId ,Text = x.Name + " " + x.Surname}, "Value","Text")'></select>
Parthenopaeus answered 13/1, 2021 at 9:24 Comment(0)
C
0

I'm using .Net 6 Core, but pretty sure I've been doing this for a while now. I broke it into two pieces, but you can cram it all into one SelectList:

var accountList = time.Anagrafica_Dipendente.Select(x => new 
{
  x.ID_Dipendente,
  FullName = x.Surname + " " + x.Name
});

var selectList = new SelectList(accountList, "ID_Dipendente", "FullName");
Chirpy answered 19/7, 2022 at 17:42 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.