2009-08-24 11 views
10

Quelle est la manière la plus simple d'obtenir une requête LINQ (à partir d'une base de données SQL - est-ce important?) Pour commander des chaînes naturellement?LINQ et un ordre de tri naturel

Par exemple, je suis en train actuellement ces résultats:

  • Projet 1
  • Projet 10
  • Projet 2

Ce que je voudrais est de voir est la suivante:

  • Projet 1
  • Projet 2
  • Projet 10

La requête J'utilise est la suivante:

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

« naturellement » est subjective. Pouvez-vous décrire ce que vous voulez dire plus précisément? – StingyJack

+0

@StingyJack - Dans un ordre de tri humain, pas un ordre de tri informatique. – Kieron

+1

HA - Ordre de tri "Humain". Vous voulez dire l'ordre du dictionnaire latin, insensible à la casse? Avez-vous un identifiant pour ces projets? – StingyJack

Répondre

9

Il n'y a aucun moyen intégré pour le faire en utilisant le framework .NET, mais je suggère que vous avez lu Natural Sorting in C# pour une discussion sur le sujet et une implémentation open-source.

0

Je n'ai que quelques années de retard à la fête, mais j'essayais juste de résoudre un problème similaire et cela a fonctionné pour moi. J'espère que quelqu'un d'autre trouve cela utile.

Supposons que vous avez vos chaînes dans une liste, essayer quelque chose comme ceci:

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