我遇到了数据集问题:
我从两个不同的服务器获得了两个数据集,但它们具有相同的列。
所以就是这样:
First DataSet:
asset description make jobtype jan feb ... dec
0001 mine ik Acc 0 0 10
0002 yours ic Over 0 0 10
第二个数据集:
asset description make jobtype jan feb ... dec
0001 mine ik Acc 10 0 10
0002 yours ic Gen 0 0 0
但我想将2个数据集合并为一个:
asset description make jobtype lhjan imjan lhfeb lhfeb ... lhdec imdec
0001 mine ik Acc 0 10 0 0 10 10
0002 yours ic Over 0 0 0 0 10 0
所以一个数据中的所有数据都与具有相同资产和相同作业类型的第二个数据相结合。
我尝试了linq,但我无法达到它想要的样子。 我正在研究vb.net framework 3.5。
你可以帮助我吗?于连
答案 0 :(得分:1)
我只想确保数据源1和2实际上是数据表。这是我的答案将如何描述这一点。我也会在C#中描述它,虽然语法没有太大区别。您需要替换混合字段的选择。您还需要根据需要调整数据类型
from dt1 in ds["datatable1"].AsEnumerable()
join dt2 in ds["datatable2"].AsEnumerable() on
new { asset = dt1.Field<string>("asset"), jobtype = dt1.Field<string>("jobtype") } equals
new { asset = dt2.Field<string>("asset"), jobtype = dt2.Field<string>("jobtype") }
select new
{
asset = dt1.Field<string>("asset"),
description = dt1.Field<string>("description"),
make = dt1.Field<string>("make"),
...
lhjan = dt1.Field<int>("jan"),
imjan = dt2.Field<int>("jan"),
lhfeb = dt1.Field<int>("feb"),
imfeb = dt2.Field<int>("feb"),
....
};
这是近似 vb语法:
Dim query = _
From dt1 In dataset.Tables["datatable1"].AsEnumerable() _
Join dt2 In dataset.Tables["datatable2"].AsEnumerable()_
On new { asset = dt1.Field(Of String)("asset"), jobtype = dt1.Field(Of String)("jobtype") } _
Equals new { asset = dt2.Field(Of String)("asset"), jobtype = dt2.Field(Of String)("jobtype") } _
Select New With _
{ _
// see members from c# example _
}
答案 1 :(得分:1)
如果你真的只想加入这两个,你可以在2个不同的Adaptor.fill()中使用相同的数据集。
如果在第二次填充之前未使用新数据集,则2将合并。