DataSet中多个表的内连接

时间:2015-09-21 14:44:20

标签: asp.net vb.net datatable dataset adodb

我有一个包含2个数据表的数据集。这些表是从2个不同的Oracle数据库中检索的(物理上和逻辑上是分开的)。

我需要在这两个驻留在1个数据集中的表上进行内部联接。然后在gridview中显示结果。

是否有可能在数据集内的表上执行SQL连接?

如果是,有没有人有一个成功的例子?如果没有,有人可以指出我正确的方向 - 我不希望做任何" hacks" (手动循环直播和其他迭代)因为我相信在环境中会有一种方法,只需要正确的方法。

这是VB .net所以我们希望得到一个更相关的代码,但我们非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

试试这个方法助手:

private DataTable JoinDataTables(DataTable t1, DataTable t2, params Func<DataRow, DataRow, bool>[] joinOn)
{
    DataTable result = new DataTable();
    foreach (DataColumn col in t1.Columns)
    {
        if (result.Columns[col.ColumnName] == null)
            result.Columns.Add(col.ColumnName, col.DataType);
    }
    foreach (DataColumn col in t2.Columns)
    {
        if (result.Columns[col.ColumnName] == null)
            result.Columns.Add(col.ColumnName, col.DataType);
    }
    foreach (DataRow row1 in t1.Rows)
    {
        var joinRows = t2.AsEnumerable().Where(row2 =>
            {
                foreach (var parameter in joinOn)
                {
                    if (!parameter(row1, row2)) return false;
                }
                return true;
            });
        foreach (DataRow fromRow in joinRows)
        {
            DataRow insertRow = result.NewRow();
            foreach (DataColumn col1 in t1.Columns)
            {
                insertRow[col1.ColumnName] = row1[col1.ColumnName];
            }
            foreach (DataColumn col2 in t2.Columns)
            {
                insertRow[col2.ColumnName] = fromRow[col2.ColumnName];
            }
            result.Rows.Add(insertRow);
        }
    }
    return result;
}