溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

每天進步一點點——在Linq結(jié)果中增加項

發(fā)布時間:2020-07-04 02:02:08 來源:網(wǎng)絡 閱讀:503 作者:bigman_ren 欄目:編程語言
   Linq已經(jīng)出現(xiàn)在.net中好久了,但是卻一直沒有用過,所以也沒有過深入的學習。換了家新單位,項目中卻大量的使用了Linq,時不時的會遇到個障礙。在這里記錄下,算是一個積累,也希望能給遇到同樣問題的同學一點兒幫助。

   今天遇到的問題是這樣的,我需要把一個枚舉綁定到View(項目使用了ASP.NET MVC框架)上的下拉列表控件。

   

   為了說明這個問題,先準備了一段代碼,聲明一個枚舉,用來在頁面上進行綁定

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

   其實只是綁定這個枚舉,還是挺簡單的,首先向動態(tài)字典ViewBag里添加數(shù)據(jù)

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<SelectListItem>)ViewBag.EnumExampleData)

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


   但是這跟實際項目中的要求還稍有點兒差距,一般我們以枚舉作為狀態(tài)值或者屬性值時,進行某些操作時,比如查詢,有可能需要這個值為空(查所有狀態(tài)),所以我們還需要在下拉控件中增加一個“請選擇”或者“所有值”的項。

   當然實現(xiàn)的方式會有很多種,前臺直接使用JavaScript來添加,或者先維護一個包含枚舉項值得列表,再向列表中添加一個“all”的項,等等等等。但我今天就是想在給ViewBag.EnumExampleData賦值的時候一次性的就實現(xiàn)這個需求。由于對Linq真的不是太熟,琢磨出下面這么一種方法,給大家參考

ViewBag.EnumExampleData = (from q in new List<SelectListItem> { 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。如果大家有其他的方式也可以交流一下哈。


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI