![]() |
Модераторы: gambit |
![]() ![]() ![]() |
|
neiron |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 18.4.2006 Где: Краснодар Репутация: нет Всего: 4 |
Добрался я и до LINQ. И сразу какую-то непонятность захотелось написать))
Есть
WrapperClass в своих корнях собственно содержит нужное свойство Type:
Что мне собственно хочется - получить сгруппированную по Type коллекцию. Написал сейчас вот так:
При нахождении в dict одного элемента увидел в collect нечто похожее на правду. Добавляю второй объект - высыпается: По крайней мере в одном объекте должен быть реализован интерфейс IComparable. Быть может я в корне неверно поступаю и должен быть совсем другой подход? Да, в итоге нужно будет этот collect ещё как то к TreeView wpf-ному привязать с узлами Type соответственно, что и есть основная задача. |
||||||
|
|||||||
mihryak |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 1 Всего: 36 |
а в каком виде тебе нужен результат?
этот код выдаст список объектов { Тип, список элементов } Type, разумеется, должен реализовывать интерфейсы IEqualityComparer<Type> и IComparer<Type> или же в вызов GroupBy нужно будет передать экземпляр IEqualityComparer<Type>, а в OrderBy - IComparer<Type> (первому нужно иметь возможность проверять равенство, чтобы сгруппировать, второму - определять больше-меньше, чтобы упорядочить, оба интерфейса можно реализовать в одном классе) Это сообщение отредактировал(а) mihryak - 27.8.2009, 12:09 |
|||
|
||||
neiron |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 18.4.2006 Где: Краснодар Репутация: нет Всего: 4 |
По хорошему мне нужен результат в виде:
Type1 |-------WrapperClass1 |-------WrapperClass2 Type2 |-------WrapperClass5 |-------WrapperClass15 Type3 |-------WrapperClass3 Именно так должно выглядеть конечное дерево. Насколько я понимаю, приведённый пример как раз это и делает. Только не совсем понял
Type, который есть MyClass.Type - это Enum обыкновенный. Не совсем понял где эти интерфейсы реализовывать? В самом WrapperClass? Так? Но мне, скорее всего, нужно будет в дальнейшем делать подобное приведение, но группируя и сортируя по другим полям. К примеру, наоборот - группировка по диапазону ID, а сортировка по Type и Id. Как то так. Извиняюсь за большое непонимание, но с LINQ я ещё не разбирался конкретно. |
|||
|
||||
mihryak |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 1 Всего: 36 |
да, результат будет нужный
можно, впрочем, и без последнего селекта и преобразования в List обойтись, они скорее для наглядности. пробежаться по результату можно и без них:
для Enum ничего делать не надо, он и так может сравниваться на равенство и на больше-меньше, а вот для других свойств, особенно пользовательских типов, реализовывать скорее всего потребуется. Можно реализовать в самом типе или, если это кажется неудобным/некрасивым или сами эти проверки нигде, кроме, подобных выборок задействованы не будут, то сделать новый класс |
|||
|
||||
neiron |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 18.4.2006 Где: Краснодар Репутация: нет Всего: 4 |
Спасибо большое. Выборка работает на ура. Осталось её прикрутить к дереву. Но это уже не этой ветки обсуждение.
|
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | LINQ (Language-Integrated Query) | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |