比较两个数据表以查找匹配的值
本文关键字:查找 数据表 两个 比较 | 更新日期: 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));
}