Ваш первый порыв был почти правильно. :) По David B, если вы не говорите LINQ точно, как определить равенство, а затем дать ему кучу XElements, он сравнивает их по ссылке. К счастью, вы можете сказать, что он использует разные критерии, указав IEqualityComparer
(в основном, объект, который имеет метод Equals, который возвращает true, если два XElements равны в соответствии с вашим определением и false в противном случае и метод 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 - от here (прокрутите вниз до второго сообщения).
Это было прекрасно. Благодаря! – 2009-02-03 15:29:53