通过筛选节点的属性值来获取非重复十进制节点


<states_Page>
  <states>
  <state id="sectionenable" systemstate="n" focuscontrol="" default="">
  </state>
</states>
<states>
  <state id="controlenable" systemstate="n" focuscontrol="" default="">
  </state>
</states>
<states>
  <state id="controldisable" systemstate="n" focuscontrol="" default="">
  </state>
</states>
<states>
  <state id="controldisable2" systemstate="n" focuscontrol="" default="">
  </state>
</states>
<states>
  <state id="sectionenable2" systemstate="n" focuscontrol="" default="">
  </state>
</states>
<states>
  <state id="sectionenable" systemstate="n" focuscontrol="" default="">
  </state>
</states>
</states_Page>

根元素下有 6 个元素。

我想要具有不同属性名称的节点。

所以我只需要返回 5 个具有不同属性值的元素。我尝试过 LINQ,但它单独返回不同的属性值。但我需要整个元素。

var ds = (from ele in root.Elements("states").Elements("state") 
          select ele.Attribute("id").Value).Distinct();

因此,请帮助我在一行查询中获取整个元素。

试试这个:-

var result = xdoc.Root.Descendants("states")
                      .GroupBy(x => x.Element("state").Attribute("id").Value)
                      .Select(x => x.First());

如果你想获取元素而不是节点,你可以使用这样的anonymous类型:-

var result = xdoc.Root.Descendants("states")
                  .GroupBy(x => x.Element("state").Attribute("id").Value)
                  .Select(x =>
                      {
                         var firstNode = x.First().Element("state");
                         return new
                         {
                            StateId = firstNode.Attribute("id").Value,
                            SystemState = firstNode.Attribute("systemstate").Value,
                            Focuscontrol = firstNode.Attribute("focuscontrol").Value,
                            Default = firstNode.Attribute("default").Value
                          };
                       });

最新更新