使用C#从Linq到XML,如何查找属性值?

使用C#从Linq到XML,如何查找属性值?,linq,Linq,我需要使用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 ve

我需要使用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>

12
CL-MC-0012-07
20131520320
24/07/2013 13:00
3.
20131520321
24/07/2013 13:00
3.
13
CL-MC-0012-07
20132058590
20/10/2013 09:00
3.
20132058591
20/10/2013 09:00
3.

您当前正在将值转换为
字符串
,但随后将其与
int
进行比较。不要那样做——这不会起作用的:)

将其转换为
int
可能是最简单的方法:

var Activites = (from e in Doc.Descendants("Activity")
                 where (int)Doc.Element("Claim").Element("ID") == 13   
                 ...)
接下来,看看您的XML,
声明
元素不在
活动
元素中。。。你可能只是想:

var activities = doc.Descendants("Claim")
                    .Where(claim => (int) claim.Element("ID") == 13)
                    .SelectMany(claim => claim.Elements("Activity"));

这将查找ID为13(其中可能只有一个)的所有
Claim
元素,然后使用
SelectMany
选择其活动,这样结果将是一系列活动元素,而不是一系列序列…

您的标题将讨论属性。。。但此文档中没有属性。如果你的意思是“元素值”(我怀疑),你应该编辑你的帖子。此外,“它不起作用”永远不能很好地描述所发生的事情。您是否遇到编译时错误?例外?只是没有结果?@AymanJbr:是的-熟悉使用查询表达式和“点表示法”的LINQ很重要。编译器只是将查询表达式转换为“点表示法”。看见