我有以下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>
我正在寻找一个可以返回重复节点的LINQ查询。在上面的XML中有两个相似的节点。结果应该包括重复的节点。
我还需要一个可以返回所有不重复节点的查询。请帮忙。
答案 0 :(得分:5)
我建议您创建一个Car
类,并从XML中创建Car
个实例列表,并对该列表进行分析。
它会简化一些事情,因为如果所有属性都相同,你可以覆盖Equals
类的Car
方法只返回true。
答案 1 :(得分:5)
此查询将导致XML中的重复Cars
条目列表,您可以从那里获取:
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();
列表中的每个副本都包含多个节点是没有意义的,因为它们是重复的。同样,您可以过滤掉与任何其他Cars节点不重复的节点,只需更改where条件:
var uniqueCars = doc.Descendants("Cars")
.GroupBy(c => c.ToString())
.Where(g => g.Count() == 1)
.Select(g => g.First())
.ToList();