1

我正在尝试使用 LINQ 从 XML 文件中读取值。这真的是我第一次尝试使用 LINQ 与普通的 C#/.Net 方法。

我的 XML 如下所示:

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

这是我正在使用的 LINQ 表达式。我想读取值 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();   

我无法弄清楚我做错了什么。任何帮助表示赞赏。

4

1 回答 1

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();
于 2012-04-27T21:14:51.387 回答