2009-12-04 36 views
18

İsveççe kelimelerle bir dizi dizim olduğunu varsayalım: banan, äpple, apelsin, druvaLINQ'a göre kültüre göre nasıl sipariş verebilirim?

Şimdi bu listeyi sıralamak istiyorum (bunun, gerçek sorgunun çok basitleştirilmiş bir versiyonu olduğunu unutmayın):

var result = from f in fruits // The list mentioned above 
      orderby f 
      select f 

Bu bana verecektir: apelsin, äpple, banan, druva. Ancak, İsveç alfabesine göre şunu almalıyım: apelsin, banan, druva, äpple

System.Threading.Thread.CurrentThread.CurrentCulture değerini sv-SE olarak değiştirmeyi denedim ancak bu gerçekten hiç etkilemiyor gibi görünüyor. Kendi lambda işlevimi yazmak zorundayım ve .OrderBy(...) kullanmalı mıyım yoksa LINQ'u sağlam tutmak için yapabileceğim başka bir şey var mı?

+0

I Bu eski bir soru olduğunu biliyorum ve yorumumu ne sorduğunuzda tam olarak değil. Ayrıca Entity Framework'den linq yoluyla gelen veri tabanından veri ayırmada sıkıntı yaşadım. Veritabanımda yanlış bir harmanlama ayarladığımı anladım. Onu Danimarkalı olarak değiştirdim ve sıralama tekrar doğru çalıştı. –

cevap

32

Bir sorgu ifadesi ile bunu yapamaz, ancak açık nokta gösterimi ile bunu yapabilirsiniz: parçacığının geçerli kültür varsayarak bunu yapmalıyım

var result = fruits.OrderBy(f => f, StringComparer.CurrentCulture); 

doğrudur. Alternatif:

CultureInfo culture = new CultureInfo("sv-SE"); 
var result = fruits.OrderBy(f => f, StringComparer.Create(culture, false)); 
+0

Yup, Şüphelendiğim kadarıyla ... Basitleştirilmiş LINQ sorgularını kullanmaya devam etmenin uygun bir yolu olduğunu umuyordum =) – Blixt

2

Ben senin kullanım örneğini denedim ve (.NET 3.5 ve .NET 4.0 ikisi) kültüre özgü karşılaştırıcısı sağlamak için bir ihtiyaç olmadan geçerli sonuçlar sağlamak vermedi:

Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("sv-SE"); 
    var fruits = new[] { "banan", "äpple", "apelsin", "druva" }; 
    var result = (from f in fruits orderby f select f).ToList(); 

    // outputs: apelsin, banan, druva, äpple 
    string resultsJoined = string.Join(", ", result); 
İlgili konular