简体   繁体   English

将列表转换为 IEnumerable<SelectListItem>

[英]Convert List to IEnumerable<SelectListItem>

Tricky problem here.棘手的问题在这里。 I'm trying to convert items for a list to IEnumerable<SelectListItem> .我正在尝试将列表的项目转换为IEnumerable<SelectListItem>

Lists列表

dynamicTextInDatabase simply returns all the Enums that are used in my database. dynamicTextInDatabase只返回在我的数据库中使用的所有枚举。 Currently only returns 1 and 2. The data class simple holds an int value.目前只返回 1 和 2。数据类 simple 保存一个 int 值。

dynamicTextEnumsInDatabase is the same list as above just in the class that actually stores my Enums. dynamicTextEnumsInDatabase是与上面相同的列表,只是在实际存储我的枚举的类中。

dynamicTextEnumsAll is a list of all the Enums that are available in my application. dynamicTextEnumsAll是我的应用程序中可用的所有枚举的列表。 Currently: 1, 2 and 3.当前:1、2 和 3。

dynamicTextEnumsAvaiable is a list of all the unused Enums. dynamicTextEnumsAvaiable是所有未使用的枚举的列表。 It combines All the Enums and then removes the ones that are in the database list.它组合了所有枚举,然后删除了数据库列表中的枚举。

I need to pass the dynamicTextEnumsAvaiable to my View via the ViewBag to display in a drop-down list.我需要通过dynamicTextEnumsAvaiabledynamicTextEnumsAvaiable传递给我的视图以显示在下拉列表中。 However, It must be IEnumerable<SelectListItem> rather than a List .但是,它必须是IEnumerable<SelectListItem>而不是List

Code代码

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

Maybe try this?也许试试这个? ( untested ) 未经测试

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

You could do the following您可以执行以下操作

ViewBag.AvaiableEnums = new SelectList(dynamicTextEnumsAvaiable)

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

You can maybe use a Linq statement to convert it您可以使用 Linq 语句来转换它

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

If you need to convert a List of objects (without Enums) to IEnumerable, you can use a declarative style of LINQ:如果您需要将对象列表(不带枚举)转换为 IEnumerable,您可以使用 LINQ 的声明式样式:

var items = from TipoDoc t in tipoDocs
                select new SelectListItem {Value = t.Id, Text = t.Description};

Here, tipoDocs is a List of objects of type TipoDoc这里,tipoDocs 是一个 TipoDoc 类型的对象列表

public class TipoDoc
{
    public string Id { get; set; }
    public string Description { get; set; }
}

你试过吗

IEnumerable<SelectListItem> myCollection = dynamicTextEnumsAvaiable.AsEnumerable()

Just use .AsEnumerable() method.只需使用.AsEnumerable()方法。

Example:示例:

IEnumerable<SelectListItem> myCollection = dynamicTextEnumsAvaiable.AsEnumerable()

Check out here: https://msdn.microsoft.com/en-us/library/system.data.datatableextensions.asenumerable(v=vs.110).aspx在这里查看: https : //msdn.microsoft.com/en-us/library/system.data.datatableextensions.asenumerable(v=vs.110).aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 将SelectListItem转换为IEnumerable列表 - Convert SelectListItem to IEnumerable List 将表转换为IEnumerable <SelectListItem> - Convert Table to IEnumerable<SelectListItem> 无法隐式转换类型“列表”<system.web.mvc.selectlistitem> 到'IEnumerable<microsoft.aspnetcore.mvc.rendering.selectlistitem> ' </microsoft.aspnetcore.mvc.rendering.selectlistitem></system.web.mvc.selectlistitem> - Cannot implicitly convert type 'List<System.Web.Mvc.SelectListItem> to 'IEnumerable<Microsoft.AspNetCore.Mvc.Rendering.SelectListItem>' 使用TModel的通用函数转换为IEnumerable <SelectListItem> - Generic Function using TModel to Convert to IEnumerable<SelectListItem> 转换IDictionary <Guid,string> 到IEnumerable <SelectListItem> - Convert IDictionary<Guid,string> to the IEnumerable<SelectListItem> DropDown List错误:“没有类型&#39;IEnumerable的ViewData项 <SelectListItem> “ - DropDown List error : "There is no ViewData item of type 'IEnumerable<SelectListItem>' “没有类型为&#39;IEnumerable的ViewData项 <SelectListItem> 自定义模型和列表出现“”错误 - “There is no ViewData item of type 'IEnumerable<SelectListItem>'” error with custom model and list 用于转换IEnumerable的Lambda扩展方法 <T> 列表 <SelectListItem> - Lambda Extension Method for Converting IEnumerable<T> to List<SelectListItem> 转换我的清单 <int> 进入列表 <SelectListItem> - Convert my List<int> into a List<SelectListItem> 传递 IEnumerable<SelectListItem> 到控制器 - Passing IEnumerable<SelectListItem> to Controller
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM