2013-04-13 43 views
6

我的訂單有LINQ表達式的問題。它以錯誤的順序生成輸出。我來自丹麥並創建了丹麥網站,因此訂單必須準確無誤。Linq orderby culture(丹麥語,澳大利亞)

這裏是我的查詢:

var model = (from w in db.News 
       orderby w.Title 
       select w).ToList(); 

輸出是:

1, 123 
2, æøå 
3, hallo 
4, know 

正確的順序應該是這樣的:

1, 123 
2, hallo 
3, know 
4, æøå 

如何糾正呢?

+0

如果排序實際上是在數據庫中完成的,SQL服務器的排序規則是什麼?我想你的情況應該是丹麥或丹麥 - 挪威。 –

回答

9

可以傳遞字符串比較器對OrderBy方法,如果你會用流利的LINQ語法:

var model = db.News.OrderBy(w => w.Title, StringComparer.InvariantCulture) 
       .ToList(); 

順便說一句,您可以創建專門針對你的文化字符串比較器與StringComparer.Create方法:

StringComparer.Create(new CultureInfo("da-DK"), true) 
+0

嘿,謝謝。然而這是一個錯誤。說:「LINQ to Entities不識別方法'System.Linq.IOrderedQueryable ........方法,並且此方法不能被轉換成存儲表達式。」 – aventic

+1

@KasperHyldalPedersen不幸的是,Linq to Entities不支持與客戶比較器進行排序,因爲它無法將其轉換爲SQL。我建議你通過添加'AsEnumerable()'調用來將訂單移動到客戶端:'db.News.AsEnumerable()。OrderBy(...)' –

+1

Aha,好的AsEnumerable()感謝您的幫助,由於這個問題,我可能已經整晚都睡不着了:)謝謝你。 – aventic