我正在尝试使用LINQ从XML文件中读取值。 这是我第一次尝试使用LINQ而不是普通的C#/ .Net方法。
我的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 :(得分: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();