Mam te dwa pliki danych i chcę uzyskać różnicę między nimi. Oto przykład:Jak uzyskać różnicę między dwoma DataTables
Table1
-------------------------
ID | Name
--------------------------
1 | A
2 | B
3 | C
--------------------------
Table2
-------------------------
ID | Name
--------------------------
1 | A
2 | B
--------------------------
Chcę tylko wynikiem danych, która jest w tabela1 a nie w tabela2 (tabela1-Tabela 2)
ResultTable
-------------------------
ID | Name
--------------------------
3 | C
--------------------------
Starałem się używać tych dwóch podobnych rozwiązań poprzez Linq ale zawsze zwraca tabelę1, a nie tabelę1-tabelę2. Oto pierwsze rozwiązanie:
DataTable table1= ds.Tables["table1"];
DataTable table2= ds.Tables["table2"];
var diff= table1.AsEnumerable().Except(table2.AsEnumerable(),DataRowComparer.Default);
drugie rozwiązanie:
var dtOne = table1.AsEnumerable();
var dtTwo = table2.AsEnumerable();
var difference = dtOne.Except(dtTwo);
Więc, gdzie jest błąd? Bardzo dziękuję za wszystkie twoje odpowiedzi. :)
Oprócz kontroli, czy są one takie same, czy nie. Nie są jednak takie same ich właściwości. Możesz użyć przeciążenia, które akceptuje EqualityComparer lub możesz zbadać metodę rozszerzenia ExceptBy(), która jest zaimplementowana w różnych bibliotekach LINQ +, także w Jon Skeets MoreLinq (http://code.google.com/p/morelinq/) – Tormod
@ Tormod, ale jaki jest pożytek z 'DataRowComparer' w swoim pierwszym rozwiązaniu? Nadpisuje 'public bool Equals (TRow leftRow, TRow rightRow)', aby porównać rzeczywiste wartości kolumn. – hometoast
Czy możesz pokazać, jak odzyskujesz dane? Czy to możliwe, że dane są inne, niż się spodziewasz? Zrobiłem krótką próbkę w LINQPad i twoje pierwsze rozwiązanie wydaje się działać dobrze. – goric