使用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