2009-11-16 87 views
18

我已經完成了對此網站的簡短搜索,並使用了Google搜索,但似乎無法找到一個好例子。我仍然試圖讓我的頭在整個「Lambda表達式」的事情。如何使用VB.Net lambda表達式按多個列排序

這裏的任何人可以給我一個例子,使用VB.Net和Linq-to-SQL使用lambda表達式來排序多列嗎?

這裏是我現有的代碼,使用單柱下令其結果返回一個有序列表:

Return _dbContext.WebCategories.OrderBy(Function(c As WebCategory) c.DisplayOrder).ToList 

注:WebCategory對象有一個孩子好康對象(基於外鍵)。我想先訂購WebPage.DisplayOrder,然後再訂購WebCategory.DisplayOrder。

我嘗試鏈接順序bys,就像下面一樣,雖然它編譯並運行,但它似乎沒有以我想要的順序返回數據。

Return _dbContext.WebCategories.OrderBy(Function(c As WebCategory) c.DisplayOrder).OrderBy(Function(c As WebCategory) c.WebPage.DisplayOrder).ToList 

在此先感謝。

回答

39

我在Google快速搜索中找到了this MSDN article。 我猜是你想找的是:

Return _dbContext.WebCategories.OrderBy(Function(c As WebCategory) c.DisplayOrder). _ 
ThenBy(Function(c As WebCategory) c.WebPage.DisplayOrder).ToList 
+0

感謝,這正是我一直在尋找。 如果我可能會問,您用來查找該文章的Google搜索詞是什麼? – camainc 2009-11-16 19:58:59

+1

哇,我正在做(我以爲是)正是這個,它不會工作,我正在得到某種Linq相關的異常......變得令人難以置信的沮喪......然後我發現我忘記了最後一個「.ToList 「部分。我知道很明顯,回想起來它需要是正確的數據類型,但我想我有一個「森林樹木」時刻。感謝您的信息! – evilspoons 2012-06-14 14:39:00

12

你應該使用ThenBy這樣的:

Return _dbContext.WebCategories.OrderBy(Function(c As WebCategory) c.DisplayOrder) _ 
           .ThenBy(Function(c As WebCategory) c.WebPage.DisplayOrder) _ 
           .ToList() 
+1

謝謝!你和HuBeZa同時回答了這個問題,但既然你已經有了比他更多的徽章,我就給了他答案。 – camainc 2009-11-16 19:59:55

+0

BTW:如果你需要你自己的IComparer,你必須使用它兩次(一次爲.OrderBy,一次爲.ThenBy命令)。只需添加',New MyOwnIComparer',當然也可以添加名爲MyOwnIComparer的類的代碼 – PeterCo 2016-11-13 10:46:24