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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрос к XML 
:(
    Опции темы
Miller_time
Дата 17.5.2011, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 641
Регистрация: 8.9.2006
Где: Нижний Новгород

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



Есть XML файл с такой структурой

Код

<row>
<field name="FIO" value="Иванов Иван Иванович"/>
<field name="DELO" value="109"/>
<field name="FACULT" value="ФСПОиДП"/>
</row>
<row>
<field name="FIO" value="Сергей Сергеевич "/>
<field name="DELO" value="110"/>
<field name="FACULT" value="ФСПОиДП"/>
</row>
...
...
...



надо выбрать все записи у которых поле field имеет атрибут name="FACULT" и значение к примеру ФСПОиДП


Пишу так 

Код

            var Groups = from gr in doc.Descendants("row")
                         where gr.Element("field").Attribute("name").Value == "FACULT"
                         select gr;


Но уже на этой стадии мне возращаются пустрые значения.



--------------------
Мы делаем игрыЗДЕСЬ
PM MAIL WWW ICQ   Вверх
WarHog
Дата 17.5.2011, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

var Groups = xmlDoc.Descendants("row")
                .SelectMany(r => r.Elements("field"))
                .Where(f => f.Attribute("name").Value == "FACULT" && f.Attribute("value").Value == "ФСПОиДП");

--------------------
PM MAIL   Вверх
-Mikle-
Дата 17.5.2011, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

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



или так:
Код

            var groups =
                doc.Descendants("row")
                    .Where(row => row.Descendants("field")
                        .Any(f => f.Attribute("name").Value == "FACULT" && f.Attribute("value").Value == "ФСПОиДП"));



--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Miller_time
Дата 17.5.2011, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 641
Регистрация: 8.9.2006
Где: Нижний Новгород

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



О_о

Код

            XDocument doc = XDocument.Load(fileName);

            var Groups = doc.Descendants("row")
                .SelectMany(r => r.Elements("field"))
                .Where(f => f.Attribute("name").Value == "FACULT" && f.Attribute("value").Value == DropDownList1.Text);

             var Groups1 = doc.Descendants("row")
                .SelectMany(r => r.Elements("field"))
                .Where(z => z.Attribute("name").Value == "SPECNAME" && z.Attribute("value").Value == DropDownList2.Text);


            int i = 0;
            foreach (var item in Groups1)
            {
                if (i < 10)
                {
                    Label1.Text += item.ToString() + "<br>";
                }
                i++;

            }


Получилось вот так, все заработало хорошо только, объясните пожалуйста 


Код

            var Groups = doc.Descendants("row")
                .SelectMany(r => r.Elements("field"))
                .Where(f => f.Attribute("name").Value == "FACULT" && f.Attribute("value").Value == DropDownList1.Text)
                .Where(z => z.Attribute("name").Value == "SPECNAME" && z.Attribute("value").Value == DropDownList2.Text);


При попытке указать еще одно условие значения уже не возращаются :(

Добавлено через 4 минуты и 28 секунд
А еще если можно подскажите как можно сделать сортировку например по атрибуту <field name="DELO" value="110"/>?


--------------------
Мы делаем игрыЗДЕСЬ
PM MAIL WWW ICQ   Вверх
-Mikle-
Дата 17.5.2011, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

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



Потому что второй Where накладывается на результат первого Where и получается что ты соединяшь их через -И-. Как понял, тебе нужен -ИЛИ-:
Код

var Groups = doc.Descendants("row")
                .SelectMany(r => r.Elements("field"))
                .Where((f => f.Attribute("name").Value == "FACULT" && f.Attribute("value").Value == DropDownList1.Text) || (f => f.Attribute("name").Value == "SPECNAME" && f.Attribute("value").Value == DropDownList2.Text));


Добавлено через 5 минут и 56 секунд
Кстати, чтоб ты не запутался между вариантом WarHog и моим, поясню разницу. В моем случае возвращается коллекция элементов row в которых филды соответствуют критериям. В варианте WarHog возвращается коллекция элементов field, которые соответствует критериям. Это так, чтоб понимал разницу и мог выбрать, что тебе нужно для твоей задачи.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Miller_time
Дата 17.5.2011, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 641
Регистрация: 8.9.2006
Где: Нижний Новгород

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



именно И, но ничего не возращает..:(


--------------------
Мы делаем игрыЗДЕСЬ
PM MAIL WWW ICQ   Вверх
-Mikle-
Дата 17.5.2011, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

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



Ну значит нет подходящих записей. Проверь все данные и помни, что у тебя регистрозависимый поиск.

Добавлено через 4 минуты и 33 секунды
Для сортировки используй OrderBy


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Miller_time
Дата 17.5.2011, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 641
Регистрация: 8.9.2006
Где: Нижний Новгород

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



Извините что то не совсем понимаю с сортировкой

Код

var rows0 = from a in doc.Descendants("row")
                       from b in a.Elements("field")
                       from c in b.Attributes("value")
                       where c.Value == DropDownList1.Text
                       select a;

            var rows1 = from a in rows0
                        from b in a.Elements("field")
                        from c in b.Attributes("value")
                        where c.Value == DropDownList2.Text
                        select a;



            
            Label1.Text = "";
            int i = 0;
            foreach (var item in rows1)
            {
                RateUser ru = new RateUser();
                foreach (var fields in item.Elements("field"))
                {
                    if (fields.Attribute("name").Value == "FIO")
                    {
                        Label1.Text += fields.Attribute("value").Value.ToString()+"   ";
                        ru.FIO = fields.Attribute("value").Value.ToString();
                    }
                    if (fields.Attribute("name").Value == "DELO")
                    {
                        Label1.Text += fields.Attribute("value").Value.ToString() + "<br />";
                        ru.rateing = int.Parse(fields.Attribute("value").Value.ToString());
                    }
                }
                i++;
                list_users.Add(ru);
            }


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

            var rows1 = from a in rows0
                        from b in a.Elements("field")
                        from c in b.Attributes("value")
                        where c.Value == DropDownList2.Text
                        select a;


Пробовал сделать вот так но судя по запиясям сортирует по первому атрибуту записи.

Код

            var rows1 = from a in rows0
                        from b in a.Elements("field").OrderBy(t=> t.Attribute("name").Value)
                        from c in b.Attributes("value")
                        where c.Value == DropDownList2.Text
                        select a;



--------------------
Мы делаем игрыЗДЕСЬ
PM MAIL WWW ICQ   Вверх
WarHog
Дата 17.5.2011, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



если я правильно понял вопрос о сортировке, то д.б. что-то вроде этого
Код

foo = xmlDoc.Descendants("row")
                .OrderBy(r => r.Descendants("field").First(f => f.Attribute("name").Value == "DELO").Attribute("value").Value)
                .SelectMany(r => r.Elements("field"))
                 .Where(f => f.Attribute("name").Value == "FACULT");

--------------------
PM MAIL   Вверх
-Mikle-
Дата 17.5.2011, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

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



Вообще я так и не понял, тебе после запроса нужно получить список строк у которых поля соответствуют критериям, или получить сплошной список полей без какого-либо отношения к строкам?


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


 




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


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

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