比较2个数据表中行的唯一组合&;使用LINQ查找它们是否相同
本文关键字:查找 LINQ 使用 是否 amp 数据表 2个 组合 唯一 比较 | 更新日期: 2023-09-27 18:01:47
DataSet oDs=新建DataSet((;DataTable odt=新DataTable((;
odt.Columns.Add(new DataColumn("FILE_ID", typeof(string))); odt.Columns.Add(new DataColumn("ID", typeof(string))); oDs.Tables.Add(odt); oDs.AcceptChanges(); for (int i = 1; i < 3; i++) { DataRow oDr = oDs.Tables[0].NewRow(); oDr["FILE_ID"] = "a" + i; oDr["ID"] = "b" + i; oDs.Tables[0].Rows.Add(oDr); } for (int i = 1; i < 3; i++) { DataRow oDr = oDs.Tables[0].NewRow(); oDr["FILE_ID"] = "c" + i; oDr["ID"] = "d" + i; oDs.Tables[0].Rows.Add(oDr); } oDs.AcceptChanges(); DataTable odt1 = new DataTable(); odt1.Columns.Add(new DataColumn("FILE_ID", typeof(string))); odt1.Columns.Add(new DataColumn("ID", typeof(string))); oDs.Tables.Add(odt1); oDs.AcceptChanges(); for (int i = 1; i < 3; i++) { DataRow oDr = oDs.Tables[1].NewRow(); oDr["FILE_ID"] = "a" + i; oDr["ID"] = "b" + i; oDs.Tables[1].Rows.Add(oDr); } for (int i = 1; i < 3; i++) { DataRow oDr = oDs.Tables[1].NewRow(); oDr["FILE_ID"] = "c" + i; oDr["ID"] = "d" + i; oDs.Tables[1].Rows.Add(oDr); } oDs.AcceptChanges();
我需要一个LINQ查询,通过它我可以找到行的值的组合(FILE_ID+ID(是否是唯一的&如果它们在两个数据表中相同
这将获得非唯一值:
var notUnique = odt.AsEnumerable()
.GroupBy(x => (string) x["FILE_ID"] + x["ID"])
.Where(g => g.Count() > 1);
查找一个表中的值而不查找另一个表的值可在此处找到比较
您的特殊情况如下:
var differentRows =
odt.AsEnumerable().Where(
o =>
odt1.AsEnumerable().All(
o1 => ((string) o["FILE_ID"] + o["ID"]) != ((string) o1["FILE_ID"] + o1["ID"])))
.Union(odt1.AsEnumerable().Where(
o1 => odt.AsEnumerable().All(o => ((string)o["FILE_ID"] + o["ID"]) != ((string)o1["FILE_ID"] + o1["ID"]))));
请记住,这就像"except"方法一样,重复记录不会显示为差异。但由于您正在检查上面的欺骗,我认为不需要进一步的检查。