Ihr erster Impuls war fast richtig. :) Wie pro David B, wenn Sie LINQ nicht genau sagen, wie Sie Gleichheit definieren und dann eine Reihe von XElements geben, es wird sie vergleichen Bezug genommen wird. Glücklicherweise können Sie verschiedene Kriterien angeben, indem Sie ein IEqualityComparer
angeben (im Grunde ein Objekt mit einer Equals-Methode, die true zurückgibt, wenn zwei XElements entsprechend Ihrer Definition gleich sind und andernfalls false und eine GetHashCode-Methode, die ein XElement verwendet und gibt einen Hash-Code basierend auf Ihren Gleichheits-Kriterien zurück).
Zum Beispiel:
var elements = xDocument.Descendants(w + "sdt")
.Union(otherDocument.Descendants(w + "sdt", new XElementComparer())
.RestOfYourCode
...
Irgendwo anders in Ihrem Projekt
public class XElementComparer : IEqualityComparer‹XElement› {
public bool Equals(XElement x, XElement y) {
return ‹X and Y are equal according to your standards›;
}
public int GetHashCode(XElement obj) {
return ‹hash code based on whatever parameters you used to determine
Equals. For example, if you determine equality based on the ID
attribute, return the hash code of the ID attribute.›;
}
}
Anmerkung: Ich habe nicht den Rahmen zu Hause, so dass der genaue Code nicht ist getestet und der IEqualityComparer-Code ist von here (scrollen Sie zum zweiten Post).
Das war perfekt. Vielen Dank! –