找到重复的xelements

Saj*_*jid 1 xml linq group-by distinct duplicates

我有以下XML

<Automobiles>
  <Cars>
    <YearofMfr>2010</YearofMfr>
    <Mileage>12</Mileage>
    <MeterReading>1500</MeterReading>
    <Color>Red</Color>
    <Condition>Excellent</Condition>
  </Cars>
  <Cars>
    <YearofMfr>2010</YearofMfr>
    <Mileage>12</Mileage>
    <MeterReading>1500</MeterReading>
    <Color>Red</Color>
    <Condition>Excellent</Condition>
  </Cars>
  <Cars>
    <YearofMfr>2008</YearofMfr>
    <Mileage>11</Mileage>
    <MeterReading>20000</MeterReading>
    <Color>Pearl White</Color>
    <Condition>Good</Condition>
  </Cars>
</Automobiles>
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个返回重复节点的LINQ查询.在上面的XML中有两个相似的节点.结果应包括重复的节点.

我还需要一个查询,它将返回所有不重复的节点.请帮忙.

Dan*_*rth 5

我建议你创建一个Car类并Car从XML 创建一个实例列表,并在该列表上进行分析.
它会简化一些事情,因为如果所有属性都相同,你可以覆盖类的Equals方法Car只返回true.


Bro*_*ass 5

此查询将导致CarsXML 中的重复条目列表,您可以从那里获取:

XDocument doc = XDocument.Load(@"test.xml");
var duplicates = doc.Descendants("Cars")
                    .GroupBy(c => c.ToString())
                    .Where(g => g.Count() > 1)
                    .Select(g => g.First())
                    .ToList();
Run Code Online (Sandbox Code Playgroud)

为列表中的每个副本包含多个节点是没有意义的,因为它们是重复的.同样,您可以过滤掉与任何其他Cars节点重复的节点,只需更改where条件:

var uniqueCars = doc.Descendants("Cars")
                    .GroupBy(c => c.ToString())
                    .Where(g => g.Count() == 1)
                    .Select(g => g.First())
                    .ToList();
Run Code Online (Sandbox Code Playgroud)