通过Linq比较两个数据表

时间:2012-10-14 15:44:20

标签: c# linq datatable

您好我正在尝试通过Linq比较两个datatable。但我得到了这个例外:

  

特定演员表无效

请帮我,因为我是Linq的新手。这是我正在使用的代码:

var matched1 = from table1 in dtAvailableStores.AsEnumerable()
               join table2 in dtControlStores.AsEnumerable() 
               on table1.Field<int>("STORE_NBR") 
               equals table2.Field<int>("STORE_NBR")
               select table1;

此处STORE_NBR是字符串值。

2 个答案:

答案 0 :(得分:3)

你可以对这段代码有一个相当不错的想法:

var qry1 = datatable1.AsEnumerable().Select(a => new { MobileNo = a["ID"].ToString() });
var qry2 = datatable2.AsEnumerable().Select(b => new { MobileNo = b["ID"].ToString() });

var exceptAB = qry1.Except(qry2);

DataTable dtMisMatch = (from a in datatable1.AsEnumerable() join ab in exceptAB on a["ID"].ToString() equals ab.MobileNo select a).CopyToDataTable();

参考文献:

  1. Compare two datatable using LINQ Query
  2. Compare two DataTables for differences in C#?

答案 1 :(得分:2)

如果该字段实际上不是int,则会发生这种情况。