我需要使用linq C#获取特定声明ID = 13的所有活动,我正在尝试以下代码,但它无效。
XDocument Doc = XDocument.Load(DownloadedPath);
var Activites = (from e in Doc.Descendants("Activity")
where (string)Doc.Element("Claim").Element("ID") == 13
下面的是Xml
<?xml version="1.0" encoding="utf-8"?>
<Advice>
<Claim>
<ID>12</ID>
<ProviderID>CL-MC-0012-07</ProviderID>
<Activity>
<ID>20131520320</ID>
<Start>24/07/2013 13:00</Start>
<Type>3</Type>
</Activity>
<Activity>
<ID>20131520321</ID>
<Start>24/07/2013 13:00</Start>
<Type>3</Type>
</Activity>
</Claim>
<Claim>
<ID>13</ID>
<ProviderID>CL-MC-0012-07</ProviderID>
<Activity>
<ID>20132058590</ID>
<Start>20/10/2013 09:00</Start>
<Type>3</Type>
</Activity>
<Activity>
<ID>20132058591</ID>
<Start>20/10/2013 09:00</Start>
<Type>3</Type>
</Activity>
</Claim>
答案 0 :(得分:2)
您目前正在将该值转换为string
,然后将其与int
进行比较。不要这样做 - 它不会起作用:)。
将其转换为int
可能最简单:
var Activites = (from e in Doc.Descendants("Activity")
where (int)Doc.Element("Claim").Element("ID") == 13
...)
接下来,查看您的XML - Claim
元素不在Activity
元素中...您可能只是想要:
var activities = doc.Descendants("Claim")
.Where(claim => (int) claim.Element("ID") == 13)
.SelectMany(claim => claim.Elements("Activity"));
这将找到ID为13的所有Claim
元素(其中可能只有一个),然后使用SelectMany
选择其活动,以便结果将是一系列活动元素而不是一系列序列...