web-dev-qa-db-fra.com

Convertir la liste en IEnumerable <SelectListItem>

Problème délicat ici. J'essaie de convertir des éléments d'une liste en IEnumerable<SelectListItem>.

Des listes

dynamicTextInDatabase renvoie simplement toutes les énumérations utilisées dans ma base de données. Actuellement, ne renvoie que 1 et 2. La classe de données simple contient une valeur int.

dynamicTextEnumsInDatabase est la même liste que ci-dessus, juste dans la classe qui stocke réellement mes Enums.

dynamicTextEnumsAll est une liste de tous les Enums disponibles dans mon application. Actuellement: 1, 2 et 3.

dynamicTextEnumsAvaiable est une liste de tous les énumérations inutilisées. Il combine tous les enums, puis supprime ceux qui figurent dans la liste de bases de données.

Je dois passer le dynamicTextEnumsAvaiable à ma vue via le ViewBag pour l'afficher dans une liste déroulante. Cependant, cela doit être IEnumerable<SelectListItem> plutôt que List.

Code

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

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

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

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

        List<DynamicTextEnum> 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();
31
Justin Adkins

Peut-être essayer ceci? (non testé)

ViewBag.AvaiableEnums = dynamicTextEnumsAvaiable.Select(x => 
                                  new SelectListItem() 
                                  {
                                      Text = x.ToString()
                                  });
70
Ric

Vous pouvez faire ce qui suit

ViewBag.AvaiableEnums = new SelectList(dynamicTextEnumsAvaiable)

Voir http://msdn.Microsoft.com/en-us/library/system.web.mvc.selectlist (v = vs.118) .aspx

13
NinjaNye

Vous pouvez peut-être utiliser une instruction Linq pour la convertir

IEnumerable<SelectListItem> myCollection = dynamicTextEnumsAvaiable
                                           .Select(i => new SelectListItem()
                                                        {
                                                            Text = i.ToString(), 
                                                            Value = i
                                                        });
11
David Pilkington