2009-04-13 2 views
1

Я написал небольшое приложение, которое позволяет мне сравнить две схемы базы данных, чтобы проверить различия в структуре. Он доходит до деталей столбца, что приятно. Когда я сравнивал очень маленькие базы данных, у меня не было проблем, но когда я начинаю сравнивать базы данных с сотнями таблиц, мне очень сложно прокручивать вверх и вниз, чтобы найти, где ошибки. Первоначально я использовал KeyedCollection, чтобы удерживать список таблицы, но поскольку он не позволяет сортировать какой-либо вид, с тех пор я изменил его на SortedList. SortedList сортирует индексы, которые дают мне таблицы в алфавитном порядке, но это меньше, чем мне нужно. Мне нужен класс, который позволяет сортировать по свойствам объекта, а не только по значениям индекса. Я хочу подтолкнуть таблицы с ошибками к началу списка для простоты использования. Кто-нибудь имеет представление о том, какой класс я мог бы использовать для этого?Поиск класса, который позволяет использовать собственный метод сортировки

EDIT1: класс List не имеет индекса, который является жизненно важным для моего класса. Я попытался использовать словарь, который имеет индекс, но не имеет метода сортировки. Реализация IComparer не работает, потому что конструктор принимает только IComparer типа индекса. И поскольку IComparer - это еще один класс, который не имеет доступа ко внутреннему списку значений моего класса списка, я не могу сравнивать на основе свойств объекта.

EDIT2: Мне нужен класс, который сортирует индекс по свойствам объекта, а не по значениям индекса, но я начинаю считать, что такой класс не существует.

ответ

0

Нет простого способа сделать это. Может быть, даже не сложно. Поскольку это предназначалось для использования в качестве выходных данных, я решил вместо этого сделать несколько циклов частичного вывода для достижения желаемых результатов.

0

Постройте SortedList с помощью перегруженного конструктора this с пользовательским классом IComparer, который вы реализуете для сортировки, как хотите.

2

Затем вам нужно создать класс для реализации: System.Collections.Generic.IComparer, тогда вы можете поместить все свои объекты в коллекции, которая поддерживает сортировку на основе IComparer, например:

системы .Collections.Generic.List позволит вам сортировать на основе вашей собственной реализации.

Вот пример link, чтобы помочь вам разобраться в этом.

0

Если все, что вы пытаетесь сделать, это создать свою собственную сортировку, то это может быть простым:

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

Если вы не хотите использовать анонимные методы и хотят иметь один и тот же тип сортировки в нескольких местах вы также можете сделать это:

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); 
Смежные вопросы