一个A表 Datatable有6个字段
 a     b    c    d     e    f  列
 1     2    3    4    5     6
 2     3    3    4    5     6
 3     4    3    4    5     6
 4     5    3    4    5     6
 5     6    3    4    5     6B表
有4个字段
 a     b    c    d    
 1     2    3    4    
 2     3    3    4   
A表是导入的,放在内存中的,B表是从数据库查出来的 
我想求出 A表和B表 a , b,c,d相同取交集。
即要要取得数据,产生以A表为参照的数据,  
 1     2    3    4    5     6
 2     3    3    4    5     6
求最简洁的写法。自己写了个 循环感觉太挫了,学习高人写法.

解决方案 »

  1.   

    数据库 查询语句? select * from A,B where A.a=B.b and A.b=B.b and A.c=B.c and A.d=B.d
     额   感觉
      

  2.   

    把你的循环改成sql查询语句或者存储过程,就好了
      

  3.   

    没有什么好办法 
    循环b表,然后通过 a表.select 找出交集数据,
      

  4.   

    如果你还不满足linq也可以    System.Data.DataTable tab1 = new System.Data.DataTable();
                tab1.Columns.Add("ID");
                tab1.Columns.Add("Name");
                tab1.Columns.Add("Description");
                tab1.Rows.Add("1", "2", "3");
                tab1.Rows.Add("2", "3", "3");
                tab1.Rows.Add("3", "4", "3");
                tab1.Rows.Add("4", "5", "3");
                System.Data.DataTable tab2 = new System.Data.DataTable();
                tab2.Columns.Add("ID");
                tab2.Columns.Add("Name");
                tab2.Columns.Add("OtherInfo");
                tab2.Rows.Add("1", "2", "3");
                tab2.Rows.Add("2", "3", "3");
                tab2.Rows.Add("6", "4", "3");
                tab2.Rows.Add("8", "5", "3");            List<DataRow> selectedRows = (from r1 in tab1.AsEnumerable()
                                              join r2 in tab2.AsEnumerable()
                                              on new { ID = r1.Field<string>("ID"), Name = r1.Field<string>("Name") }
                                                    equals new { ID = r2.Field<string>("ID"), Name = r2.Field<string>("Name") }
                                              select r1).ToList<DataRow>();