成都网站建设设计

将想法与焦点和您一起共享

每天进步一点点——在Linq结果中增加项

   Linq已经出现在.net中好久了,但是却一直没有用过,所以也没有过深入的学习。换了家新单位,项目中却大量的使用了Linq,时不时的会遇到个障碍。在这里记录下,算是一个积累,也希望能给遇到同样问题的同学一点儿帮助。

   今天遇到的问题是这样的,我需要把一个枚举绑定到View(项目使用了ASP.NET MVC框架)上的下拉列表控件。

创新互联专业为企业提供临夏网站建设、临夏做网站、临夏网站设计、临夏网站制作等企业网站建设、网页设计与制作、临夏企业网站模板建站服务,10余年临夏做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

   

   为了说明这个问题,先准备了一段代码,声明一个枚举,用来在页面上进行绑定

using System.ComponentModel;
namespace MvcApplication1.Views.Home
{
    enum EnumExample
    {
        [Description("a")]
        a = 1,
        [Description("b")]
        b = 2,
        [Description("c")]
        c = 3,
    }
}

   其实只是绑定这个枚举,还是挺简单的,首先向动态字典ViewBag里添加数据

ViewBag.EnumExampleData = from EnumExample p in Enum.GetValues(typeof(EnumExample))
                                      select new SelectListItem
                                      {
                                          Text = p.ToString(),
                                          Value = Convert.ToInt32(p).ToString()
                                      };

   然后在页面上用

@Html.DropDownListFor(p=>p.EnumExample,(IEnumerable)ViewBag.EnumExampleData)

就可以生成一个下拉列表控件了

   但是这跟实际项目中的要求还稍有点儿差距,一般我们以枚举作为状态值或者属性值时,进行某些操作时,比如查询,有可能需要这个值为空(查所有状态),所以我们还需要在下拉控件中增加一个“请选择”或者“所有值”的项。

   当然实现的方式会有很多种,前台直接使用JavaScript来添加,或者先维护一个包含枚举项值得列表,再向列表中添加一个“all”的项,等等等等。但我今天就是想在给ViewBag.EnumExampleData赋值的时候一次性的就实现这个需求。由于对Linq真的不是太熟,琢磨出下面这么一种方法,给大家参考

ViewBag.EnumExampleData = (from q in new List { new SelectListItem { Text = "all", Value = "all" } }
                           select q)
                           .Concat(from EnumExample p in Enum.GetValues(typeof(EnumExample))
                                   orderby p
                                   select new SelectListItem
                                   {
                                       Text = p.ToString(),
                                       Value = Convert.ToInt32(p).ToString()
                                   });

   方法不算聪明,就是用了一下Concat。如果大家有其他的方式也可以交流一下哈。


标题名称:每天进步一点点——在Linq结果中增加项
本文链接:http://chengdu.cdxwcx.cn/article/joecsd.html