0

我想找到孩子们有一个具体的attribute.value的Xelement attribute.value。

string fatherName =  xmlNX.Descendants("Assembly")
                           .Where(child => child.Descendants("Component")
                               .Where(name => name.Attribute("name").Value==item))
                           .Select(el => (string)el.Attribute("name").Value); 

我怎样才能得到attribute.value?它说什么是布尔值?

编辑 最初我有以下 XML:

<Assembly name="1">
  <Assembly name="44" />
  <Assembly name="3">
     <Component name="2" />
  </Assembly>
  </Assembly>

我需要获取其子项(XElement)具有特定属性的attribute.value 在此示例中,我将获取字符串“3”,因为我正在搜索子项的父项,其中attribute.value ==“2”

4

2 回答 2

2

因为嵌套Where子句的编写方式。

内部子句读取

child.Descendants("Component").Where(name => name.Attribute("name").Value==item)

这个表达式有一个类型的结果IEnumerable<XElement>,所以外部子句读取

.Where(child => /* an IEnumerable<XElement> */)

但是Where需要一个类型的参数,Func<XElement, bool>在这里你最终会传入一个Func<XElement, IEnumerable<XElement>>-- 因此错误。

我没有提供更正的版本,因为从给定的代码中您的意图根本不清楚,请相应地更新问题。

更新:

看起来你想要这样的东西:

xmlNX.Descendants("Assembly")
     // filter assemblies down to those that have a matching component
     .Where(asm => asm.Children("Component")
                     .Any(c => c.name.Attribute("name").Value==item))
     // select each matching assembly's name
     .Select(asm => (string)asm.Attribute("name").Value)
     // and get the first result, or null if the search was unsuccessful
     .FirstOrDefault();
于 2012-06-14T12:14:48.307 回答
1

我想你想要

string fatherName =  xmlNX.Descendants("Assembly")
                           .Where(child => child.Elements("Component").Any(c => (string)c.Attribute("name") == item))
                           .Select(el => (string)el.Attribute("name")).FirstOrDefault();
于 2012-06-14T12:31:55.927 回答