添加/更新IEnumerable列表

时间:2017-04-18 05:47:01

标签: c# linq enums ienumerable

我只是想问一下如何传递/更新将用于在下拉列表中显示的IEnumerable列表,因为我缺少一组行来添加它并更新enumlist以便我只能得到文字和值ArrivedCompleted。这是我模型中的可枚举列表

    public enum DeliveryPermitStatus
    {

        Arrived = 1,
        Approved = 2,
        Cancelled = 3,
        Completed = 4,
        Submitted = 5
    }

我的控制器中的代码,以便我可以添加已过滤的enumlist,并且我缺少代码以查看将用于在下拉列表中显示的更新enumlist

var enumlist = Enum.GetValues(typeof(DeliveryPermitStatus)).Cast<DeliveryPermitStatus>().Select(v => new SelectListItem
                {
                    Text = v.ToString(),
                    Value = ((int)v).ToString()
                });

                if (User.IsInRole(StaticRoleNames.Admin)) //your condition here
                {
                    foreach(var item in enumlist)
                    {
                        if(item.Text == "Arrived" || item.Text == "Completed")
                        {
                           //Missing Code Here

                        }
                    }

                }

                ViewBag.enumlist = enumlist;

2 个答案:

答案 0 :(得分:2)

我认为您要求/想要做的是根据用户的角色将ViewBag.enumlist编辑为一组简化的值?如果是这样,那么你可以过滤并在if语句中分配列表并放弃foreach循环:

var enumlist = Enum.GetValues(typeof(DeliveryPermitStatus)).Cast<DeliveryPermitStatus>().Select(v => new SelectListItem
            {
                Text = v.ToString(),
                Value = ((int)v).ToString()
            });

            if (User.IsInRole(StaticRoleNames.Admin)) //your condition here
            {
                ViewBag.enumlist = enumlist.Where(t =>  t.Text == "Arrived" || t.Text == "Completed");
            }

或者,如果你需要保留foreach循环,那么你需要创建一个单独的列表来跟踪枚举列表的“可用值”:

var enumlist = Enum.GetValues(typeof(DeliveryPermitStatus)).Cast<DeliveryPermitStatus>().Select(v => new SelectListItem
            {
                Text = v.ToString(),
                Value = ((int)v).ToString()
            });

            List<SelectListItem> availableOptions = new List<SelectListItem>();

            if (User.IsInRole(StaticRoleNames.Admin)) //your condition here
            {
                foreach(var item in enumlist)
                {
                    if(item.Text == "Arrived" || item.Text == "Completed")
                    {
                       availableOptions.Add(item);
                    }
                }

            }

            ViewBag.enumlist = availableOptions;

答案 1 :(得分:0)

您无法向IEnumerable添加元素,但您可以轻松地从中获取List。 只需在分配给你的var enumlist之前调用ToList()。

现在你可以添加元素了(注意,枚举时不要添加元素)