如何向IEnumerable SelectListItem添加项目

4

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

我试图向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;
    }

它不喜欢list.Add(newItem)。你是什么意思? - Jason Evans
1
智能感知(IntelliSense)显示IEnumerable SelectListItem不包含Add的定义。 - Shawn Larson
3个回答

12

问题在于您的变量的类型为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;
    }

1
基本上,你不能这样做,因为 IEnumerable 并不一定代表一个可以添加项目的集合。可参考 Stack Overflow 上的此问题。
如何向 IEnumerable<T> 集合中添加项?请查看此问题

1

我想分享一些有关编程的内容,也许对别人有所帮助,甚至以后对我自己也有用。请看最后一行代码。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接