Преобразовать список в IEnumerable <SelectListItem>
Трудная проблема здесь. Я пытаюсь преобразовать элементы для списка в IEnumerable<SelectListItem>
.
Списки
dynamicTextInDatabase
просто возвращает все перечисления, которые используются в моей базе данных. В настоящее время только возвращает 1 и 2. Класс данных simple имеет значение int.
dynamicTextEnumsInDatabase
- тот же список, что и выше, только в классе, который фактически хранит мои Enums.
dynamicTextEnumsAll
- список всех перечислений, доступных в моем приложении. В настоящее время: 1, 2 и 3.
dynamicTextEnumsAvaiable
- список всех неиспользуемых Enums. Он объединяет все перечисления, а затем удаляет те, которые находятся в списке базы данных.
Мне нужно передать dynamicTextEnumsAvaiable
в мой вид через ViewBag для отображения в раскрывающемся списке. Однако он должен быть IEnumerable<SelectListItem>
, а не List
.
код
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();
Ответы
Ответ 1
Может быть, попробуй? (Непроверенные)
ViewBag.AvaiableEnums = dynamicTextEnumsAvaiable.Select(x =>
new SelectListItem()
{
Text = x.ToString()
});
Ответ 2
Вы можете сделать следующее
ViewBag.AvaiableEnums = new SelectList(dynamicTextEnumsAvaiable)
См. http://msdn.microsoft.com/en-us/library/system.web.mvc.selectlist(v=vs.118).aspx
Ответ 3
Возможно, вы можете использовать оператор Linq для его преобразования
IEnumerable<SelectListItem> myCollection = dynamicTextEnumsAvaiable
.Select(i => new SelectListItem()
{
Text = i.ToString(),
Value = i
});
Ответ 4
Просто используйте метод .AsEnumerable().
Пример:
IEnumerable<SelectListItem> myCollection = dynamicTextEnumsAvaiable.AsEnumerable()
Отъезд здесь: https://msdn.microsoft.com/en-us/library/system.data.datatableextensions.asenumerable(v=vs.110).aspx
Ответ 5
Вы пробовали
IEnumerable<SelectListItem> myCollection = dynamicTextEnumsAvaiable.AsEnumerable()