通过linq查找添加/删除/更改

时间:2016-10-23 17:41:17

标签: c# linq

DataTable dtprev = new DataTable();
dtprev.Columns.Add("pref");
dtprev.Columns.Add("field1");
dtprev.Columns.Add("field2");
dtprev.Columns.Add("field3");

DataTable dtnew = dtprev.Clone();

dtprev.Rows.Add("h20", "50", "100", "150");
dtprev.Rows.Add("h20", "25", "501", "50");
dtprev.Rows.Add("h20", "50", "50", "50");
dtprev.Rows.Add("xyz", "1", "1", "35");
dtprev.Rows.Add("abc", "1", "1", "1");
dtprev.Rows.Add("abc", "2", "3", "4");
dtprev.Rows.Add("aaa", "2", "2", "2");
dtprev.Rows.Add("bbb", "1", "1", "1");
dtprev.Rows.Add("bbb", "1", "2", "1");

dtnew.Rows.Add("h20", "50", "100", "150");
dtnew.Rows.Add("h20", "25", "501", "50");
dtnew.Rows.Add("h20", "50", "503", "50");
dtnew.Rows.Add("xyz", "1", "1", "36");
dtnew.Rows.Add("xyz", "2", "3", "44");
dtnew.Rows.Add("abc", "1", "1", "1");
dtnew.Rows.Add("bbb", "2", "3", "4");
dtnew.Rows.Add("ccc", "2", "2", "2");

预期输出

"h20", "50", "100", "150" -- Matched
"h20", "25", "501", "50"  -- Matched
"h20", "50", "503", "50"  -- Changed
"xyz", "1", "1", "36"     -- Changed
"xyz", "2", "3", "44"     -- Addition
"abc", "1", "1", "1"      -- Matched
"bbb", "2", "3", "4"      -- Changed
"ccc", "2", "2", "2"      -- Addition
"abc", "2", "3", "4"      -- Deletion
"aaa", "2", "2", "2"      -- Deletion
"bbb", "1", "2", "1"      -- Deletion

我想找到比较这两个数据表的行,并希望找出新增加的行/已删除的行,这些行存在于prev但不存在于新的行中,并且还找出哪些行已更改。我在这里尝试" xyz"已更改并添加新行。

任何人都可以通过Linq帮我解决。

1 个答案:

答案 0 :(得分:0)

使用.Except()。这将返回两个集合之间的集合差异。示例:

https://msdn.microsoft.com/en-us/library/bb386962(v=vs.110).aspx

但是,如果您需要一个更具体针对您案例的示例,请告诉我。