SelectListGroup Name属性问题

时间:2016-04-05 16:12:52

标签: c# loops asp.net-mvc-5

这就是我所拥有的:

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名称?

1 个答案:

答案 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);
    }
}