比较两个数据表以查找匹配的值

本文关键字:查找 数据表 两个 比较 | 更新日期: 2023-09-27 18:11:37

我有2个数据表。每一个都有一列,我想比较它们并得到相同的值,但它不起作用。

这是我的代码:

string CurrentRequestUrl = (HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath.ToString());
DataTable dt_Item = ERP.BLL_Menu_Item.Custom_Item_ID(CurrentRequestUrl);
DataTable dt2_SysRole = ERP.BLL_Sys_User_Role.Custom_Role(Convert.ToInt64(App.UserID));
var dtOne = (dt_Item.AsEnumerable()).ToList();
var dtTwo = (dt2_SysRole.AsEnumerable()).ToList();

IEnumerable<DataRow> objIntersectResult = ((dtOne).Intersect((dtTwo))).ToList();

如何找到匹配的值?

比较两个数据表以查找匹配的值

Intersect在这里不起作用,因为在DataRow上它只是比较引用。因为所有行都是不同的引用,所以得到一个空列表。相反,您希望比较值。因此可以使用Join。但是,您希望从两个表中返回哪一行呢?如果需要这两行,可以同时创建一个匿名类型:

var objJoinResult = from rowItem in dt_Item.AsEnumerable()
                    join rowSysRole in dt2_SysRole.AsEnumerable()
                    on rowItem.Field<string>("ColumnName") equals rowSysRole.Field<string>("ColumnName")
                    select new { rowItem, rowSysRole };
输出:

foreach (var both in objJoinResult)
{ 
    Console.WriteLine("rowItem:{0} rowSysRole:{1}", 
        string.Join(",", both.rowItem.ItemArray),
        string.Join(",", both.rowSysRole.ItemArray));
}