2009-08-24 8 views
10

Was ist der einfachste Weg, um eine LINQ-Abfrage (aus einer SQL-Datenbank - ist das wichtig?), Um Strings natürlich zu bestellen?LINQ und eine natürliche Sortierreihenfolge

Zum Beispiel bin ich zur Zeit, diese Ergebnisse zu erzielen:

  • Projekt 1
  • Projekt 10
  • Projekt 2

Was Ich mag würde, ist zu sehen, ist dies:

  • Projekt 1
  • Projekt 2
  • Projekt

Die Abfrage ich benutze, ist dies:

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

„Natürlich“ subjektiv ist. Können Sie beschreiben, was Sie genauer meinen? – StingyJack

+0

@StingyJack - In einer menschlichen Sortierreihenfolge, nicht in einer Computersortierreihenfolge. – Kieron

+1

HA - "Mensch" Sortierreihenfolge. Sie meinen lateinische Wörterbuchordnung, Groß- und Kleinschreibung nicht? Hast du eine ID für diese Projekte? – StingyJack

Antwort

9

Es gibt keine eingebaute Möglichkeit, dies mit der .NET-Framework zu tun, aber ich würde vorschlagen Sie lesen Natural Sorting in C# für eine Diskussion über das Thema und eine Open-Source-Implementierung.

0

Ich bin nur ein paar Jahre zu spät zur Party, aber ich habe nur versucht, ein ähnliches Problem zu lösen, und das hat für mich funktioniert. Hoffe, jemand anderes findet das hilfreich.

Sagen Sie bitte Ihre Zeichenfolgen in einer Liste haben, versuchen Sie so etwas wie dieses:

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