2015-09-07 94 views
0

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

我怎样才能找到匹配的值?

+0

您可以使用JOIN在LINQ这 – Harsh

+0

什么不行呢?你有例外吗?错误的输出?在某些情况下只有错误的输出? – rene

+1

你比较所有记录不只是一列。 – Reniuz

回答

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)); 
} 
相关问题