Получить одну строку из запроса LINQ to XML - PullRequest
1 голос
/ 11 июня 2011

Вот что я хочу сделать:

string parseCode = from x in xml.Descendants("LogType")
                   where x.Attribute("ID").Value == string)ddlHistoryLogDefinitions.SelectedValue
                   select x.Attribute("ParseCode").Value;

Но это дает ошибку: "Невозможно неявно преобразовать тип 'System.Collections.Generic.IEnumerable' в 'string'"

Для x.Attribute("ParseCode") будет только одно значение, но он настаивает на возвращении типа IEnumerable<string>.Как я могу извлечь это значение в строку?

РЕДАКТИРОВАТЬ: Спасибо за ваши ответы.Вот что сработало для меня:

string parseCode = (from x in xml.Descendants("LogType")
                    where x.Attribute("ID").Value == (string) ddlHistoryLogDefinitions.SelectedValue
                    select (string) x.Attribute("ParseCode").Value).FirstOrDefault();

Этот трюк заключал в себе весь запрос linq в () перед .FirstOrDefault ().

Ответы [ 2 ]

5 голосов
/ 11 июня 2011

Используйте .Single, чтобы выбрать единственный результат, если вы знаете, что будет один и только один:

string parseCode = (from x in xml.Descendants("LogType")
                   where x.Attribute("ID").Value == string)ddlHistoryLogDefinitions.SelectedValue
                   select x.Attribute("ParseCode").Value).Single();

Используйте .SingleOrDefault или .First Если их может не быть или больше, соответственно один.

1 голос
/ 11 июня 2011

Ваш запрос возвращает коллекцию. Если вам нужен первый найденный LogType узел, то вы можете сделать что-то вроде этого:

string parseCode = xml.Descendants("LogType")
    .Where(x => x.Attribute("ID").Value == (string)ddlHistoryLogDefinitions.SelectedValue)
    .Select(arg => x.Attribute("ParseCode").Value)
    .FirstOrDefault();

Вернет null, если элемент не найден.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...