Linq To Javascript 利用Linq.js以選取縣市下拉式清單為例

摘要:Linq To Javascript 以選取縣市下拉式清單為例

其實大概在去年就看過相關文章,

也看過其他前輩寫的文章,

真的是挺方便的套件.

只是苦無時間可以實作來玩一下,

趁著連假就動動手來玩玩.

如果有碰過LINQ的朋友或前輩們一定不陌生,

我相信LINQ在對物件集合的操作上真的是太方便了

不論排序,條件搜尋,等等...etc

而且該套件提供了90個方法,簡直是太威了))))

並有兩種版本linq.js 和 jquery.linq.js (jQuery plugin)

詳細說明請看官網說明,真的是太棒棒了~~

官網說明

如果熟悉LINQ,那更是無縫接軌~~

接下來就是實作的部份,

如果有任何不當或者有更好的方式

也請前輩不吝指導.

小弟我是從NUGET上取得此套件

NUGET位置

如何透過NUGET取得套件至Visual studio 請點我~

 

一.新增JSON資料


 var jsonCity = {
            "results": {
                "table": [
                {
                    "city": {
                        "sortkey":1,
                        "id": "KeelungList",
                        "name": "基隆市"
                    }
                },
                {
                    "city": {
                        "sortkey": 2,
                        "id": "TaipeiCityList",
                        "name": "臺北市"
                    }
                },
                {
                    "city": {
                        "sortkey":3,
                        "id": "TaipeiList",
                        "name": "新北市"
                    }
                },
                {
                    "city": {
                        "sortkey": 4,
                        "id": "TaoyuanList",
                        "name": "桃園縣"
                    }
                },
                {
                    "city": {
                        "sortkey": 5,
                        "id": "HsinchuCityList",
                        "name": "新竹市"
                    }
                },
                {
                    "city": {
                        "sortkey": 6,
                        "id": "HsinchuList",
                        "name": "新竹縣"
                    }
                },
                {
                    "city": {
                        "sortkey": 7,
                        "id": "MiaoliList",
                        "name": "苗栗縣"
                    }
                },
                {
                    "city": {
                        "sortkey": 8,
                        "id": "TaichungList",
                        "name": "臺中市"
                    }
                },
                {
                    "city": {
                        "sortkey": 9,
                        "id": "ChanghuaList",
                        "name": "彰化縣"
                    }
                },
                {
                    "city": {
                        "sortkey": 10,
                        "id": "NantouList",
                        "name": "南投縣"
                    }
                },
                {
                    "city": {
                        "sortkey": 11,
                        "id": "YunlinList",
                        "name": "雲林縣"
                    }
                },
                {
                    "city": {
                        "sortkey": 12,
                        "id": "ChiayiCityList",
                        "name": "嘉義市"
                    }
                },
                {
                    "city": {
                        "sortkey": 13,
                        "id": "ChiayiList",
                        "name": "嘉義縣"
                    }
                },
                {
                    "city": {
                        "sortkey": 14,
                        "id": "YilanList",
                        "name": "宜蘭縣"
                    }
                },
                {
                    "city": {
                        "sortkey": 15,
                        "id": "HualienList",
                        "name": "花蓮縣"
                    }
                },
                {
                    "city": {
                        "sortkey": 16,
                        "id": "TaitungList",
                        "name": "臺東縣"
                    }
                },
                {
                    "city": {
                        "sortkey": 17,
                        "id": "TainanList",
                        "name": "臺南市"
                    }
                },
                {
                    "city": {
                        "sortkey": 18,
                        "id": "KaohsiungCityList",
                        "name": "高雄市"
                    }
                },
                {
                    "city": {
                        "sortkey": 19,
                        "id": "PingtungList",
                        "name": "屏東縣"
                    }
                },
                {
                    "city": {
                        "sortkey": 20,
                        "id": "MatsuList",
                        "name": "連江縣"
                    }
                },
                {
                    "city": {
                        "sortkey": 21,
                        "id": "KinmenList",
                        "name": "金門縣"
                    }
                },
                {
                    "city": {
                        "sortkey": 22,
                        "id": "PenghuList",
                        "name": "澎湖縣"
                    }
                }
                ]
            }
        };

 

二.透過LINQJS將JSON資料讀入並先取得所要的欄位


 /*
        透過LinqJs 將JSON讀入
        並透過OrderByDescending使用sortkey排序
        select當中所回傳的欄位
        就像是SQL query的選取特定欄位一樣
        不需要的欄位不見得要取出
        */
        var QueryResult = Enumerable.From(jsonCity.results.table)
                          .OrderByDescending(function (x) {x.city.sortkey })
                          .Select(function (x) {
                              viewData = { Name: x.city.name, Id: x.city.id };
                              return viewData
                          });

 

三.新增一個function,透過QueryResult,將縣市資料取出,放置下拉式清單中


  /*下拉縣市清單
         透過LinqJs將QueryResult
         轉為Array
         並將值取出
        */
         appendSelectCity = function () {
            var sortdata = QueryResult.ToArray();
            $.each(sortdata, function (i, item) {
                $("#city").append('

'); }); }

 四.新增一個function,將下拉式清單所選取的值,放置QueryResult做搜尋條件


  /*
        取得所選取的縣市ID
        放入QueryResult做為搜尋條件
        並轉為array

        */
         SelectCitynum = function (ele) {
            var Cityid = $(ele).find("option:selected").attr('id');
            var Seleced = QueryResult.Where(function (x) { return x.Id == Cityid }).ToArray();
            $("#sele").text('縣市名稱:' + Seleced[0].Name + ' 縣市ID:' + Seleced[0].Id);
            
           
        }

 

接下來看看執行的畫面是不是如預期一般

在body onload的事件中的這個appendSelectCity來看,

確實是將所有資料依序列出,

排序方式也是照剛剛所指定的DESC,

且欄位也是所自定義的欄位.

那看看加入搜尋條件

在select 中的onchange事件

裡的SelectCitynum的這個function

將所選取的ID放入QueryResult做搜尋條件

確實搜尋出相對應的值

真的是很方便,

在前端上就可以輕鬆的對JSON物件做操作

作者所提供的方法,我相信在實務上也會有更多的操作

再此附上

範例程式碼

 

 

 

 

參考連結

LINQ to JavaScript

linq.js - LINQ for JavaScript