Ваш первый импульс был почти верным. :) В соответствии с Дэвидом B , если вы не укажете LINQ точно, как вы определяете равенство, а затем дадите ему кучу XElements, он сравнит их по ссылке. К счастью, вы можете указать ему использовать другие критерии, указав IEqualityComparer ‹XElement› (в основном, объект, у которого есть метод Equals, который возвращает истину, если два XElements равны в соответствии с вашим определением, и ложь в противном случае, и метод GetHashCode, который принимает XElement и возвращает хеш-код на основе ваших критериев равенства).
Например:
var elements = xDocument.Descendants(w + "sdt")
.Union(otherDocument.Descendants(w + "sdt", new XElementComparer())
.RestOfYourCode
...
Где-то еще в вашем проекте
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.›;
}
}
Примечание: у меня дома нет фреймворка, поэтому точный код не тестируется, а код IEqualityComparer от здесь (прокрутите вниз до второго поста).