我试图根据该元素的子元素的属性选择元素。通过后代元素的属性过滤XElements
原始的XML:
<Root>
<Element1 id="1">
<element2>XXXX</element2>
<element3>XXXX</element3>
<element4>XXXX</element4>
<Filter attr1="1" attr2="0" attr3="0" attr4="1" attr5="0"></Filter>
</Element1>
<Element1 id="2">
<element2>XXXX</element2>
<element3>XXXX</element3>
<element4>XXXX</element4>
<Filter attr1="1" attr2="0" attr3="1" attr4="1" attr5="0"></Filter>
</Element1>
<Element1 id="3">
<element2>XXXX</element2>
<element3>XXXX</element3>
<element4>XXXX</element4>
<Filter attr1="1" attr2="1" attr3="0" attr4="1" attr5="0"></Filter>
</Element1>
</Root>
这是我迄今所做的:
Dim xmlElement = (From rec In RecipeXmlDocument.Descendants("Element1") _
Where (rec.Descendants("Filter")[email protected]= "1" _
Or rec.Descendants("Filter")[email protected] = "0" _
Or rec.Descendants("Filter")[email protected] = "0" _
And (rec.Descendants("Filter")[email protected] = "1" _
Or rec.Descendants("Filter")[email protected] = "0" _
这引发以下错误:“类型 'System.Linq.SystemCore_EnumerableDebugViewEmptyException' 引发的异常“。
代码试图做的是选择所有Element1s,其中element1的过滤元素与语句的where子句相匹配。
我对linq相当陌生,我不确定我做错了什么。
而不是'SingleOrDefault'你想要的东西像'Any',因为它的名字居然说什么它打算在这里做。 – Gabe 2011-03-15 07:53:23
这看起来很有希望,但我努力将语句转换为vb.net。 – Martinffx 2011-03-15 10:18:29
@Martinffx,是的,我很害怕这个,它是C#,你的代码是VB,因此我提到了“微调”。我不知道VB和Linq的表达式语法足以将其转换。我希望VB也有一个方法语法,你可以以某种方式推断我的意思。不幸的是,我会给它一个看看是否有帮助。 – Bazzz 2011-03-16 14:12:32