2010-10-04 3 views
1
var q = from child in doc.Descendants("level") 
     where (int)child.Attribute("id") == 55 
     select (string)child.Element("Points").**Value.ToString()**; 

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

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

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

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

ответ

0

Запрос вернет 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(); 
+0

Thanks Ramesh .. – async

+0

Ваш первый вариант - тестирование '(q.count()> 0)' first - будет дважды проверять запрос? Однажды, чтобы проверить счет, затем один раз, чтобы прочитать значение. Если вы используете 'First' или' FirstOrDefault', тогда он должен оценивать его только один раз. – Rup

+0

вы можете использовать 'Any()' вместо этого. –

2

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

.First()

.FirstOrDefault()

.Single()

.SingleOrDefault()

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

Смежные вопросы