委託+拉姆達=自動排序(一),委託拉姆達排序

來源:互聯網
上載者:User

委託+拉姆達=自動排序(一),委託拉姆達排序

         我們總能看到和使用到根據欄位排序的功能,也就是檔案總管中的點擊自動排序的效果:

                                                      

        要實現這個功能首先必須在介面的html代碼中進行如下設定:

        

         即:為要排序的欄位設定:sortable屬性,也就是將該欄位設定為可排序。

        既然是介面的排序,就必須存在一個參數,向後台調取相應的方法返回資料到介面,那麼方法有二:

       1.將要排序的欄位作為參數,層層傳遞,到後台調取方法:  

<span style="font-size:18px;">   //擷取sort時,如果sort為空白,則預設排序欄位為“entityName”,否則為擷取到的欄位。   string sort = Request["sort"] == null ? "EntityName" : Convert.ToString(Request["sort"].ToString());   //order同理:預設的排序方式為升序   string order = Request["order"] == null ? "asc" : Convert.ToString(Request["order"]);</span>
       將兩個參數層層傳遞,最後使用底層的LoadpageItems方法:

    //pageSize:每頁顯示的資料條數; pageIndex:頁碼

    //total:總數量

   // wherelamdba:查詢條件(拉姆達運算式的形式)

   //orderbyLambda:排序條件

   //isAsc :是否為升序

<span style="font-size:18px;">     IQueryable<T> LoadPageItems<Tkey>(int pageSize, int pageIndex, out int total, Expression<Func<T, bool>> whereLambda, Func<T, Tkey> orderbyLambda, bool isAsc);</span>
       其中的whereLamda:說簡單了就是一個帶有order  by 的sql語句;所有需要的參數和條件都具備之後,就可以有目的的查詢到資料庫中的資料,最後將資料一層層的返回到介面層,呈現給使用者。

       2.在查詢到所有資料之後,未顯示到介面之前,也就是在controller中直接對資料進行排序:

<span style="font-size:18px;">        /// <summary>        /// 查詢資料-->排序        /// </summary>        /// <param name="entityName">實體名稱</param>        /// <returns></returns>        public JsonResult QueryData(string strCondition)        {            //頁面的條數            int pageSize = Int32.Parse(Request.Params["rows"].ToString());            //要載入的頁數,第幾頁            int pageIndex = Int32.Parse(Request.Params["page"].ToString());            int total = 0;            #region 根據查詢條件,進行查詢            try            {                List<NonQueryPropertiesViewModel> ltProp = nonQueryPropertiesServiceWCF.GetAllNonQueryProperties(pageSize, pageIndex, out total, strCondition);                //執行個體化另外一個對象,承載對ltProp.orderBy 的集合,                //然後再對ltAgain中的資料進行表頭拼接                //擷取sort時,如果sort為空白,則預設排序欄位為“entityName”,否則為擷取到的欄位。                string sort = Request["sort"] == null ? "EntityName" : Convert.ToString(Request["sort"].ToString());                //string order = Request["order"] == null ? "asc" : Convert.ToString(Request["order"]);                List<NonQueryPropertiesViewModel> ltAgain = ltProp.OrderBy(u => u.GetType().GetProperty(sort).GetValue(u, null)).ToList();                // 集合重新整合,拼接表格標題                                        var ltPropView = ltAgain.Select(                p => new                {                    p.NonQueryId,                    p.EntityName,                    p.EntityDesc,                    p.PropertyName,                    p.PropertyDesc,                    p.Controls.ControlId,                    p.Controls.ControlDesc,                    p.ControlHtmlId,                    p.PropertyOrder,                    p.ControlHtmlName,                    p.IsShow,                    p.IsNecessary                }                ).ToList();                // 轉換成JSON,傳遞給easyui-datagrid                //拼接JSon格式                //定義傳回值                                   var strjson = new                {                    total,                    rows = ltPropView                };                return Json(strjson, JsonRequestBehavior.AllowGet);            }            catch (Exception e)            {                throw e;            }            #endregion        }        #endregion</span>
     使用這種方法,我們直接借用泛型集合的order By 屬性,根據排序條件和排序的方式對資料進行排序,然後將排好的資料也就是LtAgain 中的資料賦給介面,這樣介面第一次載入時,顯示的就是以EntityName為預設排序欄位的資料。當點擊其他欄位,資料會實現相應的操作。

        雖然我們有兩種選擇,但編程上向來講究效率,也就是程式反應的敏銳度。那麼我們來分析上面兩種方法:

      第一種方法最容易想到,但在合作開發中必須底層有LoadpageItems的方法,另外,每次單擊不同的欄位進行排序,整個擷取資料的過程都要重新執行,不僅僅浪費了空間,也降低了程式的執行效率。

      第二種方法在查詢資料的基礎上進行排序,查詢資料的方法得以再次利用,既減少了底層方法的重新開發,也使得每次排序只要在controller中重新排序即可,這樣一來既提高了效率也節省了時間。

     綜上所述,開發中不僅僅是對已有知識的運用,更重要的是巧妙地使用已有資源,提高效率。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.