May 31, 2009

使用Query Builder Methods做多欄位排序

有兩個table如下:

Category

SubCategory

CategorySubCategory存在Association (SubCategory.CategoryId與Category.CategoryId)

現在我們要針對SubCategory做多欄位排序,我們想先依SubCategory.CategoryId排序後,再對SubCategory.SubCategoryId做排序,該怎麼做呢?

方法1,使用Query Builder Methods + Lambda
MyAccountEntities db = new MyAccountEntities();

return db.SubCategory.Include("Category")
                     .OrderBy(c => c.Category.CategoryId)
                     .ThenBy(c => c.SubCategoryId)
                     .ToList();

方法2,使用Query Builder Methods + Entities SQL
MyAccountEntities db = new MyAccountEntities();

return db.SubCategory.Include("Category")
                     .OrderBy("it.Category.CategoryId, it.SubCategoryId")
                     .ToList();
it在這裡指的是SubCategory這個context,此為固定用法。

錯誤用法
Pete第一次研究如何做多欄排序時沒有發現有ThenBy這個好用的method,所以就下了以下的錯誤語法
MyAccountEntities db = new MyAccountEntities();

return db.SubCategory.Include("Category")
                     .OrderBy(c => c.Category.CategoryId)
                     .OrderBy(c => c.SubCategoryId)
                     .ToList();
中文語意上看起來好像也沒錯,我想先OrderBy Category.CategoryId,然後OrderBy SubCategory.SubCategoryId
這麼做也不會有錯誤訊息,但最後的結果是根據最後一個OrderBy method來排序。

No comments: