0
自從星期五以來,我一直在嘗試搜索解決方案,並且遇到一些問題。VB-LINQ To XML:使用來自複雜Xml文件的匿名類型的嵌套查詢
我有一個XML文件是這樣的:
<?xml version="1.0" encoding="utf-8"?>
<ObjectPropertyModule Project="PROJECT NAME" xmlns:dt="urn:schemas-microsoft-com:datatypes">
<Classes>
<Class name="class_name_1">
<Objects>
<Object name="obj_name_1">
<Properties>
<Property name="prop_A" dt:dt="string">value_A1</Property>
<Property name="prop_B" dt:dt="string">value_B1</Property>
</Properties>
</Object>
<Object name="obj_name_2">
<Properties>
<Property name="prop_A" dt:dt="string">value_A2</Property>
<Property name="prop_B" dt:dt="string">value_B2</Property>
</Properties>
</Object>
<Object name="obj_name_3">
<Properties>
<Property name="prop_A" dt:dt="string">value_A3</Property>
<Property name="prop_B" dt:dt="string">value_B3</Property>
</Properties>
</Object>
<Object name="obj_name_N">
<Properties>
<Property name="prop_A" dt:dt="string">value_AN</Property>
<Property name="prop_B" dt:dt="string">value_BN</Property>
</Properties>
</Object>
</Objects>
</Class>
<Class name="class_name_2">
<Objects>...</Objects>
</Class>
<Class name="class_name_3">
<Objects>...</Objects>
</Class>
</Classes>
</ObjectPropertyModule>
我需要有匿名對象像這樣的列表:
class_name_1_List()
el_1 = .Name = "obj_name_1"
.prop_A = "vlue_A1"
.prop_B = "vlue_B1"
el_2 = .Name = "obj_name_2"
.prop_A = "vlue_A2"
.prop_B = "vlue_B2"
el_N = .Name = "obj_name_N"
.prop_A = "vlue_AN"
.prop_B = "vlue_BN"
我試過幾個查詢我得到的最好的,但仍然不工作,是以下內容:
Dim class_name_1_List = _
From el In test...<Class> _
Where [email protected] = "class_name_1"
Select New With {.Name = el...<Object>[email protected], _
.prop_A = (From a In el...<Property> _
Where [email protected] = "prop_A" _
Select a.Value), _
.prop_B = (From a In el...<Property> _
Where [email protected] = "prop_B" _
Select a.Value)}
而我得到的代碼只是一個元素(第一個)的名稱第一個元素的屬性以及每個屬性都包含文件中所有選定屬性的列表。
像這樣:
class_name_1_List.Count = 1
el(0) = .Name = "obj_name_1"
.prop_A ={value_A1, value_A2, value_A3, ..., value_AN}
.prop_B ={value_B1, value_B2, value_B3, ..., value_BN}
是否有人知道我錯了,應該如何正確的查詢得到我需要什麼?
UPDATE:
不斷嘗試,我發現,我想與大家分享的解決方案。無論如何,如果有人知道一些不同或更有效的方法來做到這一點,我會感激任何修復。
Dim class_name_1_list = (From el In test...<Class> _
Where [email protected] = "class_name_1" _
Select From o In el...<Object> _
Select New With {.name = [email protected], _
.prop_A = (From a In o...<Property> _
Where [email protected] = "prop_A" _
Select a.Value).First(), _
.prop_B = (From a In o...<Property> _
Where [email protected] = "prop_B" _
Select a.Value).First()}).First()