Ho questi due datatables e voglio ottenere la differenza tra loro. Ecco un esempio:Come ottenere la differenza tra due DataTable
Table1
-------------------------
ID | Name
--------------------------
1 | A
2 | B
3 | C
--------------------------
Table2
-------------------------
ID | Name
--------------------------
1 | A
2 | B
--------------------------
Voglio solo il risultato come dati che è in tabella 1 e non a table2 (tabella 1-tabella2)
ResultTable
-------------------------
ID | Name
--------------------------
3 | C
--------------------------
Ho cercato di usare queste due soluzioni simili via Linq, ma restituisce sempre table1 e non table1-table2. Qui è la prima soluzione:
DataTable table1= ds.Tables["table1"];
DataTable table2= ds.Tables["table2"];
var diff= table1.AsEnumerable().Except(table2.AsEnumerable(),DataRowComparer.Default);
Seconda soluzione:
var dtOne = table1.AsEnumerable();
var dtTwo = table2.AsEnumerable();
var difference = dtOne.Except(dtTwo);
Allora, dov'è l'errore? Grazie mille per tutte le tue risposte. :)
Tranne controlla se sono o meno la stessa istanza. Non se le loro rispettive proprietà sono identiche. Puoi utilizzare il sovraccarico che accetta un EqualityComparer oppure puoi studiare il metodo di estensione ExceptBy() implementato in varie librerie LINQ +, anche in Jon Skeets MoreLinq (http://code.google.com/p/morelinq/) – Tormod
@ Tormod, ma qual è l'uso di 'DataRowComparer' nella sua prima soluzione? Sovrascrive 'public bool Equals (TRow leftRow, TRow rightRow)' per confrontare i valori effettivi delle colonne. – hometoast
Puoi mostrare come stai recuperando i tuoi dati? È possibile che i dati siano diversi da come ti aspetti? Ho fatto un rapido esempio in LINQPad e la tua prima soluzione sembra funzionare correttamente. – goric