Tôi có hai datatables và tôi muốn có được sự khác biệt giữa chúng. Dưới đây là một ví dụ:Làm thế nào để có được sự khác biệt giữa hai DataTables
Table1
-------------------------
ID | Name
--------------------------
1 | A
2 | B
3 | C
--------------------------
Table2
-------------------------
ID | Name
--------------------------
1 | A
2 | B
--------------------------
Tôi chỉ muốn kết quả dưới dạng dữ liệu mà là ở table1 và không có trong table2 (table1-table2)
ResultTable
-------------------------
ID | Name
--------------------------
3 | C
--------------------------
Tôi cố gắng để sử dụng hai giải pháp tương tự qua LINQ, nhưng nó luôn trả về table1 và không phải table1-table2. Đây là giải pháp đầu tiên:
DataTable table1= ds.Tables["table1"];
DataTable table2= ds.Tables["table2"];
var diff= table1.AsEnumerable().Except(table2.AsEnumerable(),DataRowComparer.Default);
giải pháp thứ hai:
var dtOne = table1.AsEnumerable();
var dtTwo = table2.AsEnumerable();
var difference = dtOne.Except(dtTwo);
Vì vậy, đâu là sai lầm? Cảm ơn bạn rất nhiều cho tất cả các câu trả lời của bạn. :)
Trừ séc kiểm tra hoặc không cùng một trường hợp. Không phải thời tiết thuộc tính tương ứng của chúng là giống hệt nhau. Bạn có thể sử dụng quá tải chấp nhận EqualityComparer hoặc bạn có thể điều tra phương thức mở rộng exceptBy() được triển khai trong nhiều thư viện LINQ + khác nhau, cũng trong Jon Skeets MoreLinq (http://code.google.com/p/morelinq/) – Tormod
@ Tormod, nhưng sau đó sử dụng 'DataRowComparer' trong giải pháp đầu tiên của anh ta là gì? Nó ghi đè 'public bool Equals (Trow leftRow, TRow rightRow)' để so sánh các giá trị cột thực tế. – hometoast
Bạn có thể chỉ ra cách bạn đang truy xuất các datatables của bạn? Có thể dữ liệu khác với bạn mong đợi không? Tôi đã làm một mẫu nhanh chóng trong LINQPad và giải pháp đầu tiên của bạn dường như làm việc tốt. – goric