2009-08-24 14 views
10

¿Cuál es la forma más fácil de obtener una consulta LINQ (desde una base de datos SQL, ¿eso sí importa?) Para ordenar cadenas de forma natural?LINQ y un orden de clasificación natural

Por ejemplo, actualmente estoy recibiendo estos resultados:

  • Proyecto 1
  • Proyecto 10
  • Proyecto 2

Lo que me gustaría es ver es lo siguiente:

  • Proyecto 1
  • Proyecto 2
  • Proyecto 10

La consulta que estoy usando es el siguiente:

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

"Naturalmente" es subjetivo. ¿Puedes describir lo que quieres decir más específicamente? – StingyJack

+0

@StingyJack - En un orden de clasificación humana, no en un orden de clasificación de computadora. – Kieron

+1

HA - Orden de clasificación "Humano". ¿Te refieres al orden del diccionario latino, sin distinción de mayúsculas y minúsculas? ¿Tienes una identificación para estos proyectos? – StingyJack

Respuesta

9

No hay manera integrada para realizar esta acción utilizando el marco de .NET pero sugeriría que lea Natural Sorting in C# para una discusión sobre el tema y una implementación de código abierto.

0

Llevo unos años tarde para la fiesta, pero estaba tratando de resolver un problema similar y esto funcionó para mí. Espero que alguien más encuentre esto útil.

Digamos que tiene sus cadenas en una lista, intentar algo como esto:

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