Su primer impulso fue casi correcta. :) Según David B, si usted no dice LINQ exactamente cómo se define la igualdad y luego le da un montón de XElements, comparará por referencia. Afortunadamente, puede indicarle que use diferentes criterios especificando un IEqualityComparer
(básicamente, un objeto que tiene un método Equals que devuelve verdadero si dos XElements son iguales de acuerdo con su definición y falso de lo contrario, y un método GetHashCode que toma un XElement y devuelve un código hash basado en sus criterios de igualdad).
Por ejemplo:
var elements = xDocument.Descendants(w + "sdt")
.Union(otherDocument.Descendants(w + "sdt", new XElementComparer())
.RestOfYourCode
...
En algún otro lugar en su proyecto
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.›;
}
}
Nota: no tengo el marco en el hogar, por lo que el código no es exacta probado y el código IEqualityComparer es de here (desplácese hacia abajo a la segunda publicación).
Esto fue perfecto. ¡Gracias! –