关于嵌套 LINQ to XML 查询的问题:
代码:
List<string> GetNames(string fooName)
{
string fileName = "foo.xml";
XElement myFile = XElement.Load(fileName);
IEnumerable<XElement> bars =
from response in myFile.Elements("foo")
where response.Attribute("fooName").Value.Equals(fooName)
from subResponse in response.Descendants()
select subResponse;
List<string> sNames = new List<string>();
foreach (XElement el in bars)
{
XAttribute NameAttr = el.Attribute("Name");
sNames.Add(NameAttr.Value);
}
return sNames;
}
xml:
<topElem>
<foo fooname="a">
<bar Name= "bb"/>
<bar Name= "cc"/>
<bar Name= "dd"/>
</foo>
</topElem>
问题:
当我使用参数“a”调用上述函数时,我要做的是构建一个包含“bb”、“cc”和“dd”的列表。虽然上面的代码有效,但我认为如果我更流利地使用 LINQ,我将能够直接在 LINQ 代码中生成我的列表,而不必依赖 foreach 循环来迭代 IEnumerable。我查看了该站点上的许多示例,以及其他试图找到这种确切情况的示例,但运气不佳。我已经看到了一些使用 lambda 表达式或对“select”语句执行其他操作的示例,但我没有任何运气获得从中编译出来的代码。也许添加第三个 from 声明,比如
from subSubResponse in subResponse.Attribute("Name")
select subResponse.Value
但这给出了一个错误:
源类型为“System.Collections.Generic.IEnumerable”的查询表达式的后续 from 子句中不允许使用“System.Xml.Linq.XAttribute”类型的表达式。对“SelectMany”的调用中的类型推断失败。