将List转换为IEnumerable <SelectListItem>

Jus*_*ins 33 c# asp.net-mvc enums

这里有棘手的问题.我正在尝试将列表中的项目转换为IEnumerable<SelectListItem>.

清单

dynamicTextInDatabase只返回我的数据库中使用的所有枚举.目前只返回1和2.数据类simple包含一个int值.

dynamicTextEnumsInDatabase 与实际存储我的枚举的类中的列表相同.

dynamicTextEnumsAll是我的应用程序中可用的所有枚举的列表.目前:1,2和3.

dynamicTextEnumsAvaiable是所有未使用的枚举的列表.它组合了所有枚举,然后删除数据库列表中的那些.

我需要dynamicTextEnumsAvaiable通过ViewBag 传递给我的View以显示在下拉列表中.但是,它必须是IEnumerable<SelectListItem>而不是List.

        var dynamicTextInDatabase = new List<DynamicTextEnumData>();
        var dynamicTextEnumsInDatabase = new List<DynamicTextEnum>();
        var dynamicTextEnumsAll = new List<DynamicTextEnum>();
        IEnumerable<SelectListItem> list;

        using (var proxy = new Proxy<IDynamicText>())
        {
            dynamicTextInDatabase = proxy.Channel.DynamicTextGetActiveEnums(Helper.GetCallingUser());
        }

        foreach (DynamicTextEnumData item in dynamicTextInDatabase)
        {
            var dynamicTextEnum = (DynamicTextEnum)item.DynamicTextEnum;
            dynamicTextEnumsInDatabase.Add(dynamicTextEnum);
        }

        foreach (DynamicTextEnum item in Enum.GetValues(typeof(DynamicTextEnum)))
        {
            dynamicTextEnumsAll.Add(item);
        }

        var dynamicTextEnumsAvaiable = dynamicTextEnumsAll.Except(dynamicTextEnumsInDatabase).ToList();

        if (dynamicTextEnumsAvaiable.Count == 0)
        {
            TempData["Error"] = "To update the text of a message or warning, please select it from the grid below.";
            return RedirectToAction("Index");
        }

        ViewBag.AvaiableEnums = dynamicTextEnumsAvaiable;
        return View();
Run Code Online (Sandbox Code Playgroud)

Ric*_*Ric 71

也许试试这个?(未经测试)

ViewBag.AvaiableEnums = dynamicTextEnumsAvaiable.Select(x => 
                                  new SelectListItem() 
                                  {
                                      Text = x.ToString()
                                  });
Run Code Online (Sandbox Code Playgroud)

  • 完美的。除了设置 Value 属性之外,我按原样使用它。我喜欢这些简单的 LAMBDA 技巧。 (2认同)

Nin*_*Nye 13

您可以执行以下操作

ViewBag.AvaiableEnums = new SelectList(dynamicTextEnumsAvaiable)
Run Code Online (Sandbox Code Playgroud)

请参阅http://msdn.microsoft.com/en-us/library/system.web.mvc.selectlist(v=vs.118).aspx

  • 简短又甜蜜. (3认同)
  • 选择了其他答案,是否有理由不做这个? (2认同)

Dav*_*ton 11

您可以使用Linq语句进行转换

IEnumerable<SelectListItem> myCollection = dynamicTextEnumsAvaiable
                                           .Select(i => new SelectListItem()
                                                        {
                                                            Text = i.ToString(), 
                                                            Value = i
                                                        });
Run Code Online (Sandbox Code Playgroud)