2016-04-05 3 views
0

Вот что у меня есть:SelectListGroup Имя атрибута выдают

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; 
    } 

теперь это все работает. Единственная проблема заключается в том, что я использую это для создания DropDownList, и когда это делает в представлении это выглядит следующим образом:

-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 вызывает это, но я не знаю, как получить свойство NameSelectListGroup, чтобы принимать все и только значения «Категория», без необходимости вручную вводить каждую отдельную категорию.

Итак, как мне создать SelectListGroup за пределами цикла foreach и собрать все возможные Category Имена?

ответ

1

Вам нужно найти все уникальные категории перед циклом 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); 
    } 
} 
+0

Отлично! Спасибо огромное! –

Смежные вопросы