Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> LINQ to XML, Group by Attribute 
:(
    Опции темы
Irinadanshina
Дата 26.11.2009, 03:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 26.11.2009

Репутация: нет
Всего: нет



Всем привет!
У меня есть xml-файл такого типа:

Код

<?xml version="1.0"?> 
<ROWDATA>
<ROW Id="1" Atr1="a" Atr2="Ве" Atr3=" Italic" Atr4="с" Atr5="4"/>
<ROW Id="2" Atr1="f" Atr2="re" Atr3="обычный" Atr4="r" Atr5="5"/>
....
</ROWDATA>


я пытаюсь сделать группировку по атрибуту:

Код

XElement po1 = XElement.Load(sourseFile);
IEnumerable<XElement> childElements1 = from el in po1.Elements("ROW") select el;
var query = childElements1.GroupBy(row => row.Attribute("Atr2"));
foreach (var item in query)
            {  textBox2.AppendText("Group key = " + item.Key + " \r\n");
                foreach (var inner in item)
                {
                    textBox2.AppendText("inner.Value = " + inner.Attribute("Atr3") + " \r\n");
               
                }
                                 
            }


но на выходе получается, что в группе по 1 элементу (т.е. 1 строчка=1 группе). Подскажите, пожалуйста, как сделать правильно. Т.е. чтобы в каждой группе были строки, в которых одинаковый атрибут Atr2.
Большое спасибо!
PM MAIL   Вверх
KelTron
Дата 26.11.2009, 06:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 2
Всего: 38



Потому, что у тебя происходит сравнение object - ов, а у них по умолчанию сравнение - это проверка на равенство ссылок, что не подходит.
Поэтому, чтобы правильно сравнивалось, нужно преобразовать эти объекты в строки:
Код

var query = childElements1.GroupBy(row => row.Attribute("Atr2").ToString());


Для других типов данных также нужно делать преобразование, например, для сравнения Id их нужно преобразовывать так:
Код

(int)row.Attribute("Id")


Это сообщение отредактировал(а) KelTron - 26.11.2009, 06:06


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
Irinadanshina
Дата 26.11.2009, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 26.11.2009

Репутация: нет
Всего: нет



Большое спасибо)  smile 
PM MAIL   Вверх
tol05
Дата 27.11.2009, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: нет
Всего: 170



или так

            var query1 = po1.Elements("ROW").GroupBy(row => row.Attribute("Atr2").Value);

обобщенный случай, без плясок с типами?


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
KelTron
Дата 27.11.2009, 05:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 2
Всего: 38



Цитата(tol05 @  27.11.2009,  00:17 Найти цитируемый пост)
обобщенный случай, без плясок с типами?

Тут как раз подходит только под этот конкретный случай, а именно только для строк..если нужен другой тип, то всё равно придётся "плясать". Тем более что значение "12" можно интерпретировать и как число и как строку, и без преобразования тут неоднозначность.



--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
tol05
Дата 27.11.2009, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: нет
Всего: 170



ясно, учту на будущее


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LINQ (Language-Integrated Query) | Следующая тема »


 




[ Время генерации скрипта: 0.0637 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.