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

本文关键字:删除 更改 添加 linq 查找 通过 | 更新日期: 2023-09-27 18:14:34

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

我想找到比较这两个数据表的行,并想找出新添加的行/删除的行存在于以前,但不存在于新的,也找出哪些行被改变。我尝试,但这里"xyz"被更改并添加了新行。

谁能帮我用Linq解决这个问题?

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

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

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

但是如果你需要一个更具体的例子,请告诉我。