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

时间:2015-09-07 11:36:44

标签: c# linq

我有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();

如何找到匹配的值?

1 个答案:

答案 0 :(得分:3)

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));
}