xung đầu tiên của bạn là gần như chính xác. :) Theo David B, nếu bạn không biết chính xác có bao LINQ bạn xác định sự bình đẳng và sau đó cung cấp cho nó một loạt các XElements, nó sẽ so sánh chúng bằng cách tham khảo. May mắn thay, bạn có thể yêu cầu nó sử dụng các tiêu chuẩn khác nhau bằng cách chỉ định một IEqualityComparer ‹XElement› (về cơ bản, một đối tượng có phương thức Equals trả về true iff hai XElements là bằng nhau theo định nghĩa của bạn và sai khác và phương thức GetHashCode lấy một XElement và trả về mã băm dựa trên tiêu chí bình đẳng của bạn).
Ví dụ:
var elements = xDocument.Descendants(w + "sdt")
.Union(otherDocument.Descendants(w + "sdt", new XElementComparer())
.RestOfYourCode
...
Một nơi nào đó khác trong dự án của bạn
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.›;
}
}
Lưu ý: Tôi không có khuôn khổ ở nhà, vì vậy mã chính xác không phải là kiểm tra và mã IEqualityComparer là từ here (cuộn xuống bài đăng thứ hai).
Điều này thật hoàn hảo. Cảm ơn! –