比较两个DataTable并选择第二个表中不存在的行
我有两个DataTables,我想从第一个中选择第二个不存在的行
例如:
表A id列1 data1 2 data2 3 data3 4 data4表B id列1 data10 3 data30
我希望结果如下:
表C. id列 2数据2 4数据4
你可以使用Linq,特别是Enumerable.Except
有助于在TableA中查找不在TableB中的id:
var idsNotInB = TableA.AsEnumerable().Select(r => r.Field("id")) .Except(TableB.AsEnumerable().Select(r => r.Field ("id"))); DataTable TableC = (from row in TableA.AsEnumerable() join id in idsNotInB on row.Field ("id") equals id select row).CopyToDataTable();
您也可以使用Where
但效率较低:
DataTable TableC = TableA.AsEnumerable() .Where(ra => !TableB.AsEnumerable() .Any(rb => rb.Field("id") == ra.Field ("id"))) .CopyToDataTable();
我得到了一个没有LINQ的解决方案:
public DataTable CompareDataTables(DataTable first, DataTable second) { first.TableName = "FirstTable"; second.TableName = "SecondTable"; //Create Empty Table DataTable table = new DataTable("Difference"); try { //Must use a Dataset to make use of a DataRelation object using (DataSet ds = new DataSet()) { //Add tables ds.Tables.AddRange(new DataTable[] { first.Copy(), second.Copy() }); //Get Columns for DataRelation DataColumn[] firstcolumns = new DataColumn[ds.Tables[0].Columns.Count]; for (int i = 0; i < firstcolumns.Length; i++) { firstcolumns[i] = ds.Tables[0].Columns[i]; } DataColumn[] secondcolumns = new DataColumn[ds.Tables[1].Columns.Count]; for (int i = 0; i < secondcolumns.Length; i++) { secondcolumns[i] = ds.Tables[1].Columns[i]; } //Create DataRelation DataRelation r = new DataRelation(string.Empty, firstcolumns, secondcolumns, false); ds.Relations.Add(r); //Create columns for return table for (int i = 0; i < first.Columns.Count; i++) { table.Columns.Add(first.Columns[i].ColumnName, first.Columns[i].DataType); } //If First Row not in Second, Add to return table. table.BeginLoadData(); foreach (DataRow parentrow in ds.Tables[0].Rows) { DataRow[] childrows = parentrow.GetChildRows(r); if (childrows == null || childrows.Length == 0) table.LoadDataRow(parentrow.ItemArray, true); } table.EndLoadData(); } } }
有关更多信息,请访问https://microsoftdotnetsolutions.blogspot.in/2012/12/compare-two-datatables.html
您可以使用Linq Enumerable.Except Method函数来获取两个DataTable之间的差异。在这里我使用firstDt和secondDt,记住两个Dt具有相同的结构。
var EntriesNotInB = firstDt.AsEnumerable().Select(r => r.Field("abc")).Except(secondDt.AsEnumerable().Select(r => r.Field ("abc"))); if (EntriesNotInB.Count() > 0) { DataTable dt = (from row in firstDt.AsEnumerable()join id in EntriesNotInB on row.Field ("abc") equals id select row).CopyToDataTable(); foreach (DataRow row in dt.Rows) { /////Place your code to manipulate on datatable Rows } }
要阅读有关Enumerable.Except方法的更多信息,请访问https://msdn.microsoft.com/en-us/library/system.linq.enumerable.except(v=vs.110).aspx
和它完成!!!! 快乐的编码………
上述就是C#学习教程:比较两个DataTable并选择第二个表中不存在的行分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/998819.html