2012-04-27 3 views
1

Я пытаюсь прочитать значение из XML-файла, используя LINQ. Это действительно первый раз, когда я пытаюсь использовать LINQ против обычного подхода C# /. Net.Чтение XML-элемента с использованием LINQ

Мой XML выглядит следующим образом:

<Description> 
<Account Green="A" White="D">House</Account> 
<Account Green="B" White="D">Car</Account> 
</Description> 

Это LINQexpression я использую. Я хотел бы прочитать значение House, другими словами, элемент с атрибутом A и D.

var feeds = (from item in doc.Descendants("Description") 
from category in item.Elements("Account")      
let attribute = category.Attribute("Green")      
let xAttribute = category.Attribute("White")      
where attribute != null && (xAttribute != null && (xAttribute.Value == "A" 
&& attribute.Value == "D")) select item.Value).ToString(); 

Я не могу понять, что я делаю неправильно. Любая помощь приветствуется.

+0

Это XmlElement или XElement? – Gqqnbig

ответ

1

У вас есть IEnumerable<string> здесь - Вы, видимо, просто хочу одну строку здесь так добавить First(), чтобы получить значение первого элемента в вашем перечислении:

var feeds = (from item in doc.Descendants("Description") 
from category in item.Elements("Account")      
let attribute = category.Attribute("Green")      
let xAttribute = category.Attribute("White")      
where attribute != null && (xAttribute != null && (xAttribute.Value == "A" 
&& attribute.Value == "D")) select category.Value).First(); 

простой способ добиться того же может быть :

string result = doc.Descendants("Account") 
        .Where(x => x.Attribute("Green") != null && x.Attribute("Green").Value == "A" 
          && x.Attribute("White") != null && x.Attribute("White").Value == "D") 
        .Select(x => x.Value) 
        .First(); 
+0

@SaeedAmiri: Нет - 'item.Value' уже имеет тип' string' – BrokenGlass

+0

Но это дает мне GreenWhite. Как и раньше. – user1017102

+0

@ user1017102: Исправлено - нужно выбрать 'category.Value', а не' item.Value' – BrokenGlass