【问题标题】:How to add item to IEnumerable SelectListItem如何将项目添加到 IEnumerable SelectListItem
【发布时间】:2015-01-29 20:46:52
【问题描述】:

我正在尝试将项目添加到 IEnumerable SelectList。我有一个填充我的列表的初始查询,然后我有一个查询来检查是否存在名为“INFORMATIONAL”的项目。如果没有,我需要将它添加到从我的初始查询返回的列表中。这是我的代码。它不喜欢 list.Add(newItem)。任何援助将不胜感激。谢谢

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

【问题讨论】:

  • It does not like list.Add(newItem). 什么意思?
  • intelisense 说 IEnumerable SelectListItem 不包含 Add 的定义

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


【解决方案1】:

基本上,您不能,因为 IEnumerable 不一定代表可以添加项目的集合。在 SO 上看到这个问题。

How can I add an item to a IEnumerable<T> collection?

【讨论】:

    【解决方案2】:

    问题是您的变量是IEnumerable&lt;SelectListItem&gt; 类型。将其更改为 List&lt;SelectListItem&gt; 或使用另一个变量。

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

    【讨论】:

      【解决方案3】:

      这是我想出的可能对某人有帮助的东西。以后甚至可能是我。看看最后一行代码。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-28
        • 2010-11-15
        • 2016-06-25
        • 2019-05-12
        • 2014-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多