2009-04-13 3 views
1

Ich schrieb eine kleine App, die mir erlaubt, zwei Datenbankschemas zu vergleichen, um Unterschiede in der Struktur zu überprüfen. Es geht bis zu den Spaltendetails, was nett ist. Als ich sehr kleine Datenbanken verglichen habe, hatte ich keine Probleme, aber wenn ich anfange, Datenbanken mit Hunderten von Tabellen zu vergleichen, ist es lästig, nach oben und unten zu scrollen, um die Fehler zu finden. Ursprünglich verwendete ich KeyedCollection, um die Liste der Tabelle zu halten, aber da es keine Art von Sortierung zulässt, habe ich seitdem zu SortedList gewechselt. SortedList sortiert die Indizes, was mir die Tabellen in alphabetischer Reihenfolge gibt, aber das ist weniger als das, was ich brauche. Was ich brauche, ist eine Klasse, die es mir erlaubt, basierend auf Objekteigenschaften, nicht nur auf den Indexwerten, zu sortieren. Ich möchte die Tabellen mit Fehlern zum Anfang der Liste für Benutzerfreundlichkeit pushen. Hat jemand eine Vorstellung davon, mit welcher Klasse ich das erreichen könnte?Suche Klasse, die eine benutzerdefinierte Sortiermethode ermöglicht

EDIT1: Die List-Klasse hat keinen Index, was für meine Klasse wichtig ist. Ich habe versucht, Dictionary zu verwenden, die einen Index hat, aber keine Sortiermethode hat. Das Implementieren von IComparer funktioniert nicht, da der Konstruktor IComparer des Indextyps nur akzeptiert. Und da der IComparer eine andere Klasse ist, die keinen Zugriff auf die innere Werteliste meiner Listenklasse hat, kann ich anhand der Objekteigenschaften nicht vergleichen.

EDIT2: Ich brauche eine Klasse, die den Index nach den Objekteigenschaften sortiert, nicht nach den Indexwerten, aber ich fange an zu glauben, dass eine solche Klasse nicht existiert.

Antwort

0

Es gibt keine einfache Möglichkeit, das zu tun. Vielleicht nicht einmal schwer. Da es zur Ausgabe verwendet werden sollte, entschied ich mich, stattdessen mehrere Schleifen von Teilausgaben zu machen, um die gewünschten Ergebnisse zu erreichen.

0

Konstruieren Sie die SortedList mit this überladenen Konstruktor mit einer benutzerdefinierten IComparer Klasse, die Sie implementieren, um zu sortieren, wie Sie möchten.

2

Dann benötigen Sie eine Klasse implementieren erstellen: System.Collections.Generic.IComparer, dann können Sie alle Ihre Objekte in eine Sammlung setzen, die auf IComparer basierte Unterstützung Sortierung, zum Beispiel:

-System Mit .Collections.Generic.List können Sie basierend auf Ihrer eigenen Implementierung sortieren.

Hier ist ein link zu einem guten Beispiel, um Ihnen zu helfen, dies zu verstehen.

0

Wenn alles, was Sie versuchen zu tun ist, Ihre eigene Sortierung zu erstellen, dann könnte dies die einfachste sein:

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); 
}); 

Wenn Sie nicht wollen, Anonyme Methoden verwenden und die gleiche Art der Sortierung haben wollen an mehreren Stellen können Sie dies auch tun:

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