2009-08-24 20 views
10

Dizeleri doğal olarak sipariş etmek için bir LINQ sorgusu (bir SQL veritabanından - önemli olan nedir?) Elde etmenin en kolay yolu nedir? Ne İsterdim görmektir 2 LINQ ve doğal sıralama düzeni

şudur

  • Proje 1
  • Proje 10
  • Proje:

    Örneğin, Şu anda bu sonuçları alıyorum:

    • Project 1
    • Proje 2
    • Proje 10

    kullanıyorum sorgu şudur:

    return from p in dataContext.Projects 
        orderby p.Name 
        select p; 
    
+0

"Doğal" özneldir. Daha spesifik olarak ne demek istediğini anlatabilir misin? – StingyJack

+0

@StingyJack - Bir insan sıralama düzeninde, bir bilgisayar sıralama düzeni değil. – Kieron

+1

HA - "İnsan" sıralama düzeni. Latince sözlük sırasını mı, büyük harf duyarsız mı? Bu projeler için bir kimliğiniz var mı? – StingyJack

cevap

9

NET framework kullanarak bunu yapmak için yerleşik bir yolu yoktur ama öneririm Konuyla ilgili bir tartışma ve açık kaynaklı bir uygulama için Natural Sorting in C#'u okudunuz.

0

Partiye sadece birkaç yıl geç kaldım, ama benzer bir sorunu çözmeye çalışıyordum ve bu benim için çalıştı. Umarım başka biri bunu faydalı bulur.

bir Listesi'nde Dizelerinizi var ki, böyle bir şey deneyin:

List<string> projects = new List<string> 
{ 
    "Project 1", 
    "Project 10", 
    "Project 2" 
}; 
//Sort by a substring of the string value which omits the non-numeric characters 
IEnumerable<string> sorted = projects.OrderBy(p => p.Substring(p.IndexOf(' ') + 2, p.Length - (p.IndexOf(' ') + 2)));