具有 WHERE 条件的 XElement LINQ 失败
XElement LINQ with WHERE condition fails
我正在尝试使用 LINQ 从我的 XML 中获取一个元素。
XML 文件示例:
<properties>
<property>
<location>
<unit-number>101</unit-number>
<street-address>123 Main</street-address>
<city-name>City</city-name>
<state-code>ST</state-code>
<zipCode>00000</zipCode>
<display-address>no</display-address>
</location>
<details>
<property-type>apartment</property-type>
<price>599.00</price>
<num-bedrooms>1</num-bedrooms>
<num-bathrooms>1</num-bathrooms>
<living-area-square-fee>611</living-area-square-fee>
<description></description>
<provider-listingid>819</provider-listingid>
</details>
<agent>
<agent-name>Name</agent-name>
<agent-email>email@email.com</agent-email>
</agent>
</property>
<properties>
我从 Azure 服务器打开我的 XML(工作正常),我尝试使用 LINQ 来过滤它:
// I have a functiion that loads the XML from blob
// It is working. debug shows the XML in my document variable
XDocument document = XDocument.Load(blob.Uri.AbsoluteUri);
List<XElement> check = (from el in document.Root.Elements("properties").Elements("property").Elements("agent").Elements("agent-email")
where el.Value == "email@email.com"
select el).ToList();
// Why this returns null? I have agent-email = email@email.com
谢谢
Document.Root
是 properties
元素。删除 .Elements("properties")
它会给你你想要的元素。
对于所有 VB 的读者。
Dim xe As XElement
'some test data
xe = <properties>
<property>
<location>
<unit-number>101</unit-number>
<street-address>123 Main</street-address>
<city-name>City</city-name>
<state-code>ST</state-code>
<zipCode>00000</zipCode>
<display-address>no</display-address>
</location>
<details>
<property-type>apartment</property-type>
<price>599.00</price>
<num-bedrooms>1</num-bedrooms>
<num-bathrooms>1</num-bathrooms>
<living-area-square-fee>611</living-area-square-fee>
<description></description>
<provider-listingid>819</provider-listingid>
</details>
<agent>
<agent-name>Name</agent-name>
<agent-email>email@email.com</agent-email>
</agent>
</property>
</properties>
'get matching email
Dim mtch As String = "email@email.com"
Dim check As List(Of XElement)
check = xe.<property>.<agent>.<agent-email>.Where(Function(el)
Return el.Value = mtch
End Function).ToList
我正在尝试使用 LINQ 从我的 XML 中获取一个元素。
XML 文件示例:
<properties>
<property>
<location>
<unit-number>101</unit-number>
<street-address>123 Main</street-address>
<city-name>City</city-name>
<state-code>ST</state-code>
<zipCode>00000</zipCode>
<display-address>no</display-address>
</location>
<details>
<property-type>apartment</property-type>
<price>599.00</price>
<num-bedrooms>1</num-bedrooms>
<num-bathrooms>1</num-bathrooms>
<living-area-square-fee>611</living-area-square-fee>
<description></description>
<provider-listingid>819</provider-listingid>
</details>
<agent>
<agent-name>Name</agent-name>
<agent-email>email@email.com</agent-email>
</agent>
</property>
<properties>
我从 Azure 服务器打开我的 XML(工作正常),我尝试使用 LINQ 来过滤它:
// I have a functiion that loads the XML from blob
// It is working. debug shows the XML in my document variable
XDocument document = XDocument.Load(blob.Uri.AbsoluteUri);
List<XElement> check = (from el in document.Root.Elements("properties").Elements("property").Elements("agent").Elements("agent-email")
where el.Value == "email@email.com"
select el).ToList();
// Why this returns null? I have agent-email = email@email.com
谢谢
Document.Root
是 properties
元素。删除 .Elements("properties")
它会给你你想要的元素。
对于所有 VB 的读者。
Dim xe As XElement
'some test data
xe = <properties>
<property>
<location>
<unit-number>101</unit-number>
<street-address>123 Main</street-address>
<city-name>City</city-name>
<state-code>ST</state-code>
<zipCode>00000</zipCode>
<display-address>no</display-address>
</location>
<details>
<property-type>apartment</property-type>
<price>599.00</price>
<num-bedrooms>1</num-bedrooms>
<num-bathrooms>1</num-bathrooms>
<living-area-square-fee>611</living-area-square-fee>
<description></description>
<provider-listingid>819</provider-listingid>
</details>
<agent>
<agent-name>Name</agent-name>
<agent-email>email@email.com</agent-email>
</agent>
</property>
</properties>
'get matching email
Dim mtch As String = "email@email.com"
Dim check As List(Of XElement)
check = xe.<property>.<agent>.<agent-email>.Where(Function(el)
Return el.Value = mtch
End Function).ToList