TestClassesDataContext db = new TestClassesDataContext();
var a = from ta in db.TableA
select new { ta.Name, ta.Number, ta.Title };
var b = from tb in db.TableB
select new { tb.Name, tb.Number, tb.Title };
var notInA = a.Except(b);
var notInB = b.Except(a);
var result = notInA.Union(notInB);
foreach (var i in result)
{
Console.WriteLine(i);
}
DataTable dtPhysical = new DataTable();
DataTable dtDataBase = new DataTable();
dtPhysical.Columns.Add(new DataColumn("ItemNum", typeof(string)));
dtPhysical.Columns.Add(new DataColumn("SerialNumber", typeof(string)));
dtPhysical.Columns.Add(new DataColumn("Shelf", typeof(string)));
dtPhysical.Columns.Add(new DataColumn("Bin", typeof(string)));
dtPhysical.Columns.Add(new DataColumn("Quantity", typeof(int)));
dtDataBase.Columns.Add(new DataColumn("ItemNum", typeof(string)));
dtDataBase.Columns.Add(new DataColumn("SerialNumber", typeof(string)));
dtDataBase.Columns.Add(new DataColumn("Shelf", typeof(string)));
dtDataBase.Columns.Add(new DataColumn("Bin", typeof(string)));
dtDataBase.Columns.Add(new DataColumn("Quantity", typeof(int)));
DataTable dtQueryPh = dtPhysical.Clone();
DataTable dtQueryDb = dtDataBase.Clone();
for (int i = 0; i < 100; i++)
{
DataRow row = dtPhysical.NewRow();
row["ItemNum"] = i.ToString();
row["SerialNumber"] = i.ToString() + "abc" + (i * 2).ToString();
row["Shelf"] = "Shelf " + (i / 10).ToString();
row["Bin"] = "Bin " + (i / 5).ToString();
row["Quantity"] = (i % 2 == 0) ? i : i * 2;
dtPhysical.Rows.Add(row);
}
for (int i = 0; i < 100; i++)
{
DataRow row = dtDataBase.NewRow();
row["ItemNum"] = i.ToString();
//row["Scanned"] = (i + i).ToString();
row["SerialNumber"] = i.ToString() + "abc" + (i * 2).ToString();
row["Shelf"] = "Shelf " + (i / 10).ToString();
row["Bin"] = "Bin " + (i / 5).ToString();
row["Quantity"] = (i % 2 == 0) ? i : i + 2;
dtDataBase.Rows.Add(row);
}
var queryPh = from dtP in dtPhysical.AsEnumerable()
select dtP;
var queryDb = from dtD in dtDataBase.AsEnumerable()
select dtD;
var qDbOnly = queryDb.Except(queryPh);
var qPhOnly = queryPh.Except(queryDb);
dtQueryDb = qDbOnly.CopyToDataTable();
dtQueryPh = qPhOnly.CopyToDataTable();
dgvDb.DataSource = dtQueryDb;
dgvPh.DataSource = dtQueryPh;
var qDbOnly = queryDb.Except(queryPh);
var qPhOnly = queryPh.Except(queryDb);
var qDbOnly = queryDb.Except(queryPh, DataRowComparer.Default);
var qPhOnly = queryPh.Except(queryDb, DataRowComparer.Default);
(
SELECT Name,Number,Title
FROM TableA
except
SELECT Name,Number,Title
FROM TableB
)
union
(
SELECT Name,Number,Title
FROM TableB
except
SELECT Name,Number,Title
FROM TableA
)