这就是我所拥有的:
public static List<SelectListItem> lstDailySumAssignments()
{
List<SelectListItem> lstAssignments = new List<SelectListItem>();
using(var context = new ConnectionString())
{
List<table1> lstActivity = context.table1.Where(x => x.deleted == false).ToList();
foreach(table1 activity in lstActivity)
{
SelectListItem item = new SelectListItem() { Text = activity.text, Value = activity.ID.ToString(), Group = new SelectListGroup() { Name = activity.subcategory } };
lstAssignments.Add(item);
}
}
return lstAssignments;
}
现在一切正常。唯一的问题是我使用它来创建一个下拉列表,当它在视图中呈现时它看起来像这样:
-Category 1
-value 1
-Category 1
-value 2
-Category 1
-value 3
-Category 2
-value 4
-Category 2
-value 5
-Category 2
-value 6
而不是:
-Category1
-value 1
-value 2
-value 3
-Category2
-value 4
-value 5
-value 6
我知道foreach
循环导致了这种情况,但我不知道如何让Name
的{{1}}属性接受所有且仅有'类别'的值,没有我必须手动输入每个单独的类别。
那么,如何在SelectListGroup
循环之外创建SelectListGroup
并收集所有可能的foreach
名称?
答案 0 :(得分:2)
您需要在for循环之前找到所有唯一类别,并为每个组仅创建一个SelectListGroup。 这样的事情应该有效:
var groups = lstActivity.GroupBy(a => a.subcategory);
foreach (var @group in groups)
{
var slg = new SelectListGroup() {Name = @group.Key};
foreach (table1 activity in @group)
{
SelectListItem item = new SelectListItem() { Text = activity.text, Value = activity.ID.ToString(), Group = slg };
lstAssignments.Add(item);
}
}