2009-04-13 9 views
1

J'ai écrit une petite application qui me permet de comparer deux schémas de base de données pour vérifier les différences de structure. Cela va jusqu'aux détails de la colonne, ce qui est bien. Quand je comparais de très petites bases de données, je n'ai eu aucun problème mais quand je commence à comparer des bases de données avec des centaines de tables, il est ennuyeux de faire défiler vers le haut et vers le bas pour trouver où sont les erreurs. À l'origine, j'utilisais KeyedCollection pour contenir la liste de la table, mais comme elle ne permettait aucune sorte de tri, j'ai depuis changé en SortedList. SortedList triera les index, ce qui me donne les tableaux dans l'ordre alphabétique, mais c'est moins que ce dont j'ai besoin. Ce dont j'ai besoin, c'est d'une classe qui me permet de trier en fonction des propriétés de l'objet, pas seulement sur les valeurs de l'index. Je veux pousser les tables avec des erreurs au début de la liste pour l'amour d'utilisation facile. Quelqu'un a une idée de quelle classe je pourrais utiliser pour accomplir cela?Recherche d'une classe qui permet une méthode de tri personnalisée

EDIT1: La classe List n'a pas d'index, ce qui est un peu vital pour ma classe. J'ai essayé d'utiliser Dictionary, qui a un index, mais n'a pas de méthode de tri. L'implémentation d'IComparer ne fonctionne pas car le constructeur accepte uniquement IComparer du type d'index. Et puisque l'IComparer est une autre classe qui n'a pas accès à la liste de valeurs interne de ma classe de liste, je ne peux pas comparer en fonction des propriétés de l'objet.

EDIT2: J'ai besoin d'une classe qui trie l'index par les propriétés de l'objet, pas par les valeurs d'index, mais je commence à croire que cette classe n'existe pas.

Répondre

0

Il n'y a pas de moyen facile de le faire. Peut-être même pas durement. Comme il était destiné à être utilisé pour faire des sorties, j'ai décidé de faire plusieurs boucles de sortie partielle pour atteindre les résultats que je voulais.

0

Construisez la SortedList à l'aide du constructeur surchargé this avec une classe personnalisée IComparer que vous implémentez pour trier comme vous le souhaitez.

2

Ensuite, vous devez créer une classe pour mettre en œuvre : System.Collections.Generic.IComparer, vous pouvez mettre tout votre objet dans une collection qui prennent en charge le tri basé sur IComparer, par exemple:

système .Collections.Generic.List vous permettra de trier en fonction de votre propre implémentation.

Voici un link un bon exemple pour vous aider à comprendre cela.

0

Si tout ce que vous essayez de faire est de créer votre propre tri alors cela pourrait être le plus facile:

List<Foo> myFoos = new List<Foo>(); 
//--Write code to fill the list 

//sort by ID 
myFoos.Sort(delegate(Foo foo1, Foo foo2) 
{ 
    return foo1.ID.CompareTo(foo2.ID); 
}); 

//Sort by Last Name 
myFoos.Sort(delegate(Foo foo1, Foo foo2) 
{ 
    return foo1.LastName.CompareTo(foo2.LastName); 
}); 

Si vous ne voulez pas utiliser des méthodes anonymes et veulent avoir le même type de tri à plusieurs endroits, vous pouvez également le faire:

public class FooIDCompare : IComparer<Foo> 
    { 
     #region IComparer<foo> Members 

     public int Compare(Foo x, Foo y) 
     { 
      return x.ID.CompareTo(y.ID); 
     } 

     #endregion 
    } 

FooIDCompare idCompare = new FooIDCompare(); 
myFoos.Sort(idCompare); 
Questions connexes