数据集中多个表的内部连接
inner join on multiple tables in a DataSet
我有一个包含 2 个数据的数据集 tables.Both 这些表是从 2 个不同的 Oracle 数据库(物理上和逻辑上是分开的)中检索的。
我需要对驻留在 1 个数据集中的这两个表执行内部联接。然后在gridview中显示结果。
是否有可能对数据集中的表进行 SQL 联接?
如果是的话,有没有人有一个成功的例子?如果没有,有人能给我指出正确的方向吗——我不想做任何 "hacks"(手动循环和其他类似的迭代),因为我相信在环境中会有一种方法可以做到,只需要正确的方法。
这是在 VB .net 中,因此希望能提供更相关的代码,但非常感谢任何帮助。
试试这个方法帮手:
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;
}
我有一个包含 2 个数据的数据集 tables.Both 这些表是从 2 个不同的 Oracle 数据库(物理上和逻辑上是分开的)中检索的。
我需要对驻留在 1 个数据集中的这两个表执行内部联接。然后在gridview中显示结果。
是否有可能对数据集中的表进行 SQL 联接?
如果是的话,有没有人有一个成功的例子?如果没有,有人能给我指出正确的方向吗——我不想做任何 "hacks"(手动循环和其他类似的迭代),因为我相信在环境中会有一种方法可以做到,只需要正确的方法。
这是在 VB .net 中,因此希望能提供更相关的代码,但非常感谢任何帮助。
试试这个方法帮手:
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;
}