Заполнить комбинированные списки из списков в списке - PullRequest
0 голосов
/ 03 января 2012

Я пытаюсь добавить фильтры в список пользовательских объектов в .NET 3.5 SP1. Мои объекты выглядят так:

public class Message {
  string Filename;
  DateTime Timestamp;
  List<ClassA> A;
  List<ClassB> B;
  // ...
}

public class ClassA {
  string Name;
  // ...
}

public class ClassB {
  string Description;
  // ...
}

У меня есть ObservableCollection, содержащая все мои сообщения; каждое сообщение имеет 2 или более ClassA и от 0 до n ClassB. Я уже настроил ListView для отображения сообщений (отсортированных через CollectionViewSource).

Теперь я хочу добавить два ComboBox в мой интерфейс, чтобы разрешить фильтрацию этого ListView. Конечно, они не должны содержать дубликатов, поэтому я хочу только отдельные ClassA.Names и ClassB.Description all Сообщения, в настоящее время отображаемые в ListView. Также я хочу, чтобы фильтр одного ComboBox также применялся к другому.

Фильтрация ListView уже выполнена и работает, но я не могу понять, как заполнить поля со списками.

Ответы [ 2 ]

0 голосов
/ 03 января 2012

Если я правильно понимаю, вы хотите отфильтровать коллекцию List<Messages> на основе string значений свойств коллекций элементов для типа A и типа B.

Если это так, то что-то вроде этого должно работать у вас:

var msgs = messagies.Select(ms=>ms).Where(ms=>ms.A.Exists(cla=>cla.Name.StartsWith("NameToSearch") && 
        ms.B.Exists(clb=>clb.Description.StartsWith("DescriptionToSearch"))));

Обратите внимание, что здесь я помещаю оператор AND в запрос и StartsWith строковую функцию.Вы можете заменить их на функции и операторы, более подходящие для ваших нужд.

РЕДАКТИРОВАТЬ:

Хорошая идея - сделать их также без учета регистра, используя в этом случае , например,

StartsWith("DescriptionToSearch",StringComparison.InvariantCultureIgnoreCase))

0 голосов
/ 03 января 2012

это должно работать, где сообщения - это ваша отфильтрованная коллекция сообщений:

var distinctNames = 
    (from message in Messages
    from a in message.A
    select a.Name).Distinct();

var distinctDescriptions = 
    (from message in Messages
    from b in message.B
    select b.Description).Distinct();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...