2010-11-30 7 views
1

LINQ ou SQL, comment pourrais-je avoir les chaînes suivantes, normalement classés comme:Trier la colonne varchar en commençant par la première lettre au lieu du premier caractère?

"banane" pomme coco

sorte que:

pomme "banane" coco

+0

Bien, vous demandez à SQL ou à LINQ d'ignorer le caractère spécial principal, vous aurez donc besoin d'une forme d'expression régulière, et vous pourriez finir par charger la table en mémoire pour nettoyer les données. Cela semble risqué. –

Répondre

0

Mise à jour basée sur votre commentaire

IList<string> sorted = context.Terms.ToList() 
    .OrderBy(t => Regex.Replace(t.Term, @"\W*","")).ToList(); 
+0

J'aime votre idée, mais je ne sais pas comment procéder. Comment est-ce que j'appliquerais votre suggestion à ce qui suit: var query = du terme dans le context.Terms orderby term.Term sélectionnez le terme; – mattucg

+0

mis à jour ma réponse – hunter

+0

A travaillé super, merci! – mattucg

0

Sur SQL, vous pouvez le trier sans avoir besoin REGEX fonctions en soi, vous pouvez utiliser PATINDEX. Essayez ceci:

SELECT * 
FROM Table 
ORDER BY RIGHT(Column,LEN(Column)-patindex('%[a-zA-Z]%',Column)+1) 

De cette façon, vous triez la table en utilisant la première lettre de la colonne, en ignorant les autres personnages

+0

Cela fonctionne parfaitement, merci. Je ne peux accepter qu'une réponse, et j'ai fini par utiliser LINQ, mais j'apprécie votre aide. – mattucg

0

Vous pouvez ajouter une colonne qui ne contient que la chaîne alphanumérique, puis trier à ce sujet.

La fonction RemoveNonAlphaCharacters trouvée here vous permettra de filtrer les caractères non alphanumériques. Si la table est très petite et que les performances ne sont pas un problème, vous pouvez simplement

ORDER BY RemoveNonAlphaCharacters(columnToClean) 
Questions connexes