2014-12-01 80 views
3

我想添加一個項目到IEnumerable SelectList。我有一個初始查詢來填充我的列表,然後我有一個查詢來檢查是否存在名爲「INFORMATIONAL」的項目。如果不是,我需要將它添加到從我的初始查詢返回的列表中。這是我的代碼。它不喜歡list.Add(newItem)。任何援助將不勝感激。由於如何添加項目到IEnumerable SelectListItem

public IEnumerable<SelectListItem> GetCategoriesByAccountID(string AccountID) 
    { 
     IEnumerable<SelectListItem> list = null; 

     using (var context = new AMPEntities()) 
     { 
      // Queries DB for list of categories by AccountID 
      var query = (from ca in context.CustomAlerts 
         where ca.AccountID == AccountID 
         orderby ca.AlertCategory 
         select new SelectListItem { Text = ca.AlertCategory, Value = ca.AlertCategory }).Distinct(); 
      list = query.ToList(); 

      // Checks list to see if "INFORMATIONAL" already exists 
      var item = (from l in list 
         where l.Value == "INFORMATIONAL" 
         select new SelectListItem { Text = l.Text, Value = l.Value }).FirstOrDefault(); 

      // If "INFORMATIONAL" is not present add it to list 
      if (item == null) 
      { 
       var newItem = new SelectListItem { Text = "INFORMATIONAL", Value = "INFORMATIONAL" }; 
       list.Add(newItem); 
      } 
     } 

     return list; 
    } 
+0

'它不喜歡list.Add(newItem).'你是什麼意思? – 2014-12-01 19:01:49

+1

intelisense說IEnumerable SelectListItem不包含添加的定義 – 2014-12-01 19:03:57

回答

8

的問題是,你的變量是IEnumerable<SelectListItem>類型。將其更改爲List<SelectListItem>或使用其他變量。

public IEnumerable<SelectListItem> GetCategoriesByAccountID(string AccountID) 
    { 
     List<SelectListItem> list = null; 

     using (var context = new AMPEntities()) 
     { 
      // Queries DB for list of categories by AccountID 
      var query = (from ca in context.CustomAlerts 
         where ca.AccountID == AccountID 
         orderby ca.AlertCategory 
         select new SelectListItem { Text = ca.AlertCategory, Value = ca.AlertCategory }).Distinct(); 
      list = query.ToList(); 

      // Checks list to see if "INFORMATIONAL" already exists 
      var item = (from l in list 
         where l.Value == "INFORMATIONAL" 
         select new SelectListItem { Text = l.Text, Value = l.Value }).FirstOrDefault(); 

      // If "INFORMATIONAL" is not present add it to list 
      if (item == null) 
      { 
       var newItem = new SelectListItem { Text = "INFORMATIONAL", Value = "INFORMATIONAL" }; 
       list.Add(newItem); 
      } 
     } 

     return list; 
    } 
+0

謝謝Vsevolod,這個技巧。 – 2014-12-01 19:18:58

0

這是我想出的東西,可能有助於某人。甚至可能在晚些時候。看看最後一行代碼。

 CostCenterHeaders CostHeaders = CostCenterHeaders.GetCostCenterHeaders(ClientNumber); 
     List<SelectListItem> Level1Header = new List<SelectListItem>(); 
     if (CostHeaders.Level1Heading !=null) 
     { 
      Level1Header.Add(new SelectListItem { Text = "All " + CostHeaders.Level1Heading + " Centers", Value = "" }); 
      List<HierarchyLevel> HierarchyLevels = HierarchyLevel.GetHierarchyByLevel(ClientNumber); 
      Level1Header.AddRange(HierarchyLevels.Select(x => new SelectListItem() { Value = x.LevelID, Text = x.LevelDescr }).ToList()); 
     }