从两个数据集中分组数据

时间:2010-03-28 12:56:18

标签: vb.net linq dataset linq-to-dataset

我遇到了数据集问题:

我从两个不同的服务器获得了两个数据集,但它们具有相同的列。

所以就是这样:

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。

你可以帮助我吗?

于连

2 个答案:

答案 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将合并。

相关问题