2009-08-24 12 views
10

Jaki jest najprostszy sposób na uzyskanie zapytania LINQ (z bazy danych SQL - czy to ważne?) W celu zamówienia ciągów w sposób naturalny?LINQ i naturalny porządek sortowania

Na przykład, jestem obecnie na te wyniki:

  • projektu 1
  • Projekt 10
  • Projekt 2

Co chciałbym to zobaczyć to:

  • Projekt 1
  • Projekt 2
  • Projekt 10

Zapytanie używam to:

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

„naturalnie” jest subiektywna. Czy możesz opisać, co konkretnie masz na myśli? – StingyJack

+0

@StingyJack - W porządku sortowania dla ludzi, a nie porządku sortowania komputerowego. – Kieron

+1

HA - Kolejność sortowania "ludzki". Masz na myśli kolejność słownika języka łacińskiego, wielkość liter nie ma znaczenia? Czy masz identyfikator do tych projektów? – StingyJack

Odpowiedz

9

Nie ma wbudowanego sposób to zrobić przy użyciu .NET Framework, ale sugerowałbym że czytasz Natural Sorting in C# w celu omówienia tematu i implementacji open-source.

0

Spóźniłem się na imprezę tylko kilka lat, ale próbowałem rozwiązać podobny problem i to zadziałało. Mam nadzieję, że ktoś inny uzna to za pomocne.

Powiedzmy, że masz swoje struny na liście, spróbuj coś takiego:

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)));