внутреннее соединение нескольких таблиц в наборе данных

У меня есть набор данных с двумя таблицами данных. Обе эти таблицы извлекаются из двух разных баз данных Oracle (физически и логически разделенных).

Мне нужно выполнить внутреннее соединение для этих двух таблиц, которые находятся в 1 наборе данных. А затем отобразить результат в виде сетки.

Существуют ли какие-либо возможности выполнения SQL-соединений для таблиц внутри набора данных?

Если да, то есть ли у кого-нибудь готовый пример? Если нет, может ли кто-нибудь указать мне правильное направление - я не хочу делать какие-либо «взломы» (ручной цикл и другие итерации такого рода), поскольку я считаю, что будет способ сделать это в среде, просто нужно правильный подход.

Это в VB .net, поэтому был бы признателен за более актуальный код, НО любая помощь высоко ценится.


person user2390536    schedule 21.09.2015    source источник


Ответы (1)


Попробуйте этот метод помощник:

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;
}
person user635072    schedule 21.09.2015
comment
Спасибо, я попробую. Я использую VB, поэтому мне потребуется немного времени, чтобы преобразовать вашу часть в соответствии с моими требованиями. Как-нибудь нет способа использовать что-то вроде Datatables.Select или что-то подобное? - person user2390536; 21.09.2015