I'm creating a SelectList to populate a dropdown list from a LINQ query. This works:
// my temp class for including the member count
public class GroupWithCount
{
public string group_name { get; set; }
public int group_id { get; set; }
public int members { get; set; }
}
var groups = from g in DB.Groups
where g.user_id == user_id
let mC = (from c in DB.Contacts where c.group_id == g.group_id select c).Count()
select new GroupWithCount
{
members = mC,
group_id = g.group_id,
group_name = g.group_name
};
model.Groups = new SelectList(groups, "group_id", "group_name");
However, I want the selectItem text to be in the format "group_name (members)", but I can't seem to do that. if I try
select new GroupWithCount
{
members = mCount,
group_id = g.group_id,
group_name = g.group_name + mCount
};
I get "Unable to cast the type 'System.Int32' to type 'System.Object'. " If I try
group_name = g.group_name + mCount.ToString()
I get "LINQ to Entities does not recognize the method 'System.String ToString()' method". If I try
group_name = string.Format("{0}{1}", g.group_name,mCount)
I get "LINQ to Entities does not recognize the method 'System.String Format(System.String, System.Object, System.Object)' method".
It just won't let me convert that Int32 into a string. It seems like the only option is to create a foreach method that iterates through the GroupWithCount objects and creates a collection of SelectListItems, but that's madness. There must be a better way!