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

时间:2009-08-11 11:28:41

标签: linq join linq-to-dataset

我想在两个表之间创建连接,结果将包括所有两个表列。 我想这样做而不指定具体的列名,只需选择all,因为我不知道这两个表包含多少列,也不知道它们的名称。

我只想创建两个表之间的连接,结果将包括两个表格列。

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

我试过了:

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

1 个答案:

答案 0 :(得分:0)

没有办法神奇地合并你的两张桌子。如果您需要新的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设置为数据源并绑定到SPSP2和{{1}}。