Простой запрос по LINQ - PullRequest
       1

Простой запрос по LINQ

1 голос
/ 04 октября 2010
var q = from child in doc.Descendants("level")
        where (int)child.Attribute("id") == 55
        select (string)child.Element("Points").**Value.ToString()**;

Я бы хотел получить q в виде строки типа после выполнения этого запроса.Даже после сохранения лишней жирной линии это дает мне некоторый тип IEnumerable.

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

string q = from child in doc.Descendants("level")
           where (int)child.Attribute("id") == 55
           select (string)child.Element("Points");

Любая помощь?

Ответы [ 3 ]

4 голосов
/ 04 октября 2010
var q = (from child in doc.Descendants("level")
        where (int)child.Attribute("id") == 55
        select (string)child.Element("Points")).FirstOrDefault();

Метод Enumerable.FirstOrDefault (IEnumerable)

2 голосов
/ 04 октября 2010

LINQ будет всегда возвращать перечисляемый результат.Чтобы оценить и вернуть один результат, вы можете использовать

.First ()

.FirstOrDefault ()

.Single ()

.SingleOrDefault ()

в зависимости от ваших требований.

0 голосов
/ 04 октября 2010

Запрос вернет IEnumerable, даже если результат содержит одну запись.Попробуйте это -

if q.count() > 0
    var singleQ = q.First();

Или, если вы уверены, что будет хотя бы одна запись, сделайте это так -

string q = (from child in doc.Descendants("level")
           where (int)child.Attribute("id") == 55
           select (string)child.Element("Points")).First();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...