Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用linq连接到数据集的两个表之间的连接_Linq_Join_Linq To Dataset - Fatal编程技术网

使用linq连接到数据集的两个表之间的连接

使用linq连接到数据集的两个表之间的连接,linq,join,linq-to-dataset,Linq,Join,Linq To Dataset,我想在两个表之间创建一个连接,结果将包括所有两个表列。 我希望在不指定特定列名的情况下执行此操作,只需选择全部,因为我不知道这两个表将包含多少列,也不知道它们的名称 我只想在两个表之间创建联接,结果将包括两个表列 我该怎么做? 结果类型应该是什么 我试过: var res = from t1 in ds1.Tables["Table1"].AsEnumerable() join t2 in ds1.Tables["Table2"].AsEnumerabl

我想在两个表之间创建一个连接,结果将包括所有两个表列。 我希望在不指定特定列名的情况下执行此操作,只需选择全部,因为我不知道这两个表将包含多少列,也不知道它们的名称

我只想在两个表之间创建联接,结果将包括两个表列

我该怎么做? 结果类型应该是什么

我试过:

var res = from t1 in ds1.Tables["Table1"].AsEnumerable()
           join
          t2 in ds1.Tables["Table2"].AsEnumerable()
           on t1.Field<string>("TrID") equals t2.Field<string>("TrID")
                select new { t1, t2 };
但是我得到了一个奇怪的类型,结果是我无法处理它,我无法将它转换为dataTable、Dataset或在gridview中显示它

例如,获取一个包含[TrID]、[SP]、[SP2]列的表,而无需具体创建包含这三列的匿名类型:

表1 TrID SP Asaf1 Asaf2 F1 K2 Asaf1 D2 H1 F1

表2 TrID SP2 Asaf1-Dor2 Asaf1 U1 R1 W1
I1 Y3

无法神奇地合并两个表。如果您想要一个新的DataTable,您需要创建一个具有适当列的新DataTable,并相应地添加行。或者,您确实可以将匿名类型绑定到控件,但不能使用两个DataRow属性的当前匿名类型。相反,您需要提取所需的字段:

var res = from t1 in ds1.Tables["Table1"].AsEnumerable()
          let id = t1.Field<string>("TrID")
          join t2 in ds1.Tables["Table2"].AsEnumerable()
            on id equals t2.Field<string>("TrID")
                select new {
                    TrID = id,
                    SP = t1.Field<string>("SP"),
                    SP2 = t2.Field<string>("SP2")
                };
然后可以将res设置为数据源,并绑定到TrID、SP和SP2