2013-04-13 8 views
6

Mam problem z moim zamówieniem przez wyrażenie linq. Generuje dane wyjściowe w niewłaściwej kolejności. Jestem z Danii i utworzyłem duńską stronę internetową, dlatego zamówienie musi być dokładne ofc.Linq orderby culture (duński, æøå)

Oto moje zapytanie:

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

Wyjście jest:

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

Poprawna kolejność powinna być taka:

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

Jak mogę rozwiązać ten problem?

+0

przypadku zamawiania jest naprawdę zrobione w bazie danych, co to jest sortowanie serwera SQL? Powinien być chyba duński lub duńsko-norweski w twoim przypadku. –

Odpowiedz

9

można przekazać ciąg porównywarka do OrderBy metody, jeśli będziesz korzystać biegle Linq składni:

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

BTW można utworzyć ciąg porównywarka specyficzne dla kultury z StringComparer.Create metody:

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

Hej i dzięki. Jest to jednak przyczyną błędu. Mówiąc: "LINQ to Entities nie rozpoznaje metody" System.Linq.IOrderedQueryable ........ method, a tej metody nie można przetłumaczyć na wyrażenie store. " – aventic

+1

@KasperHyldalPedersen Niestety Linq to Entities nie obsługuje zamawiania z porównywarką klientów, ponieważ nie może przetłumaczyć tego na SQL. Proponuję, aby przenieść porządek do strony klienta, dodając wywołanie 'AsEnumerable()': db.News.AsEnumerable(). OrderBy (...) ' –

+1

Aha, w porządku część AsEnumerable() zrobiła lewę. Dzięki za twoją pomoc, mogłem spędzić całą noc z powodu tego problemu :) Nie mogę ci wystarczająco podziękować. – aventic