2012-03-29 61 views
0

我有這樣的LINQ查詢:我如何根據自己的規則訂購清單?

IEnumerable<MyScheda> schede = from MyScheda scheda in new MySchede() 
           select scheda; 

,我想根據現場scheda.Note,它可以包含週六,週一,週日,等等訂購此名單。

所以,你想怎麼樣,我想按照慣常的順序或一天來訂購它們。 我該怎麼辦?

+1

是什麼類型的'筆記'字段? – 2012-03-29 09:59:13

+1

另請參閱我的答案在這裏:[如何在插入到列表時執行基於規則的對象排序](http://stackoverflow.com/questions/9886148/9910401#9910401)使用該定義星期一<星期二,星期二<星期三等。 – 2012-03-29 09:59:44

回答

1

您可以使用IEnumerable.OrderBy擴展方法與自己的比較器:

IEnumerable<MyScheda> schede = (from MyScheda scheda in new MySchede() 
           select scheda).OrderBy(s => s.Note, new DaysOfWeekComparer()); 
當然

之前已實現DaysOfWeekComparer()

+0

在這裏查看我的答案,瞭解實現'DaysOfWeekComparer'的方法。 [如何在插入到列表時執行基於規則的對象排序](http://stackoverflow.com/q/9886148) – 2012-03-29 10:09:11

0

您可以通過使用排序依據請求排序:

List<String> names=new List<String>(); 

... 

foreach(String name in from String s in names orderby s.Length select s) 
{ 
... 
} 

在你的情況,我相信你會希望使用:

orderby scheda.Note 

這是假設,當然,該類型的Note可以比較訂購。如果它不能直接進行比較,您將需要編寫一個一些代碼轉換爲「注型」可排序類型,然後使用,而不是注意直接,就像這樣:

int NoteIndexer(NoteType n); 

IEnumerable<MyScheda> schede = from MyScheda scheda in new MySchede() 
    orderby NoteIndexer(scheda.Note) 
    select scheda; 
+1

如果Note是字符串/ varchar字段,它將不會按天順序排序 – MarcinJuraszek 2012-03-29 10:09:47

+0

已授予,我的回覆確實取決於他希望他們的順序的可比類型。但是,沒有關於註釋類型的附加信息。如果有更多的信息出現,我們可以稍微解釋一下這個解決方案,但是您認爲這種迴應是一個合理的起點嗎? – Omaha 2012-03-29 10:12:16

+0

這是一個好的起點,但它可能提到了該字段在答案中是正確類型的要求。 :) – 2012-03-29 10:17:03