2010-03-16 7 views
3

Dans notre projet, nous exigeons que, lorsqu'un ensemble d'enregistrements est renvoyé par la base de données, les enregistrements doivent être triés par rapport au champ TITLE de l'enregistrement. Les enregistrements devront être triés par ordre alphabétique, mais si le titre d'un enregistrement contient un numéro, il devrait apparaître après les enregistrements dont le titre est constitué uniquement d'alphabets. Détails: Nous utilisons SQL Server et C#. Les données de la base de données proviennent d'une classe Entity qui transmet les données à d'autres couches. Alors, quelle sera la solution possible et efficace pour cette exigence.Tri des données renvoyées par une base de données

+0

Est-ce que toutes les informations? Compte tenu des éléments * ab1 *, * abc *, * abc1 *, * abd *, la liste qui en résulte devrait-elle être dans cet ordre, ou devrait-elle être * abc *, * abd *, * ab1 *, * abc1 * ou * abc *, * ab1 *, * abc1 *, * abd *? – slugster

Répondre

1

Je supposerai que vous avez un objet qui contient des données et qui a une propriété TITLE. Tenir compte:

class Entity 
{ 
    ... 
    public string TITLE { get; set; } 
    ... 
} 

Vous pouvez stocker ces entités dans un List<Entity> et plus tard, quand vous avez besoin, appelez la méthode Sort pour trier.

Pour trier en fonction de vos besoins, saisissez un Comparer lors de l'appel du tri. Pour plus d'informations, voir: http://msdn.microsoft.com/en-us/library/234b841s.aspx.
Dans Compare(Entity x, Entity y) vous pouvez comparer les deux entités en fonction de votre besoin.


A propos de la comparaison du TITLE's:
Essayez cette méthode de comparaison:

private static int StringComparer(string x, string y) 
{ 
    if (!x.AllChar()) return 1; 
    if (!y.AllChar()) return -1; 

    return x.CompareTo(y) * -1; 
} 

public static bool AllChar(this string x) 
{ 
    char[] chars = x.ToCharArray(); 
    bool allchar = chars.Any<char>((c) => !char.IsLetter(c)); 

    return !allchar; 
} 
Questions connexes