我試圖根據該元素的子元素的屬性選擇元素。通過後代元素的屬性過濾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