【问题标题】:c# datatable join and select all columns from both tablec# datatable join 并从两个表中选择所有列
【发布时间】:2018-04-12 02:46:46
【问题描述】:

我需要连接两个数据表并从两个表中选择所有值,因为 d1 列是动态的,我尝试使用下面的代码并获取连接值,但是当我选择它时,它显示在 2 个 DataRows 中,它应该在一行中

        DataTable dtRtn = new DataTable();

        var result = from d1 in dtFormData.AsEnumerable()
                     join d2 in dtResponderDetails.AsEnumerable()
                     on d1.Field<string>("ResponderId") equals d2.Field<string>("EmployeeId")
                     select new { d1,d2};

我需要将 d1 和 d2 连接的结果复制到 dtRtn 表中

编辑

我已经搜索过,但没有直接的答案,所有答案都显示了如何选择特定列

请帮忙谢谢

【问题讨论】:

标签: c# linq datatable


【解决方案1】:

您需要首先将dtFormDatadtResponderDetails 中的列动态添加到dtRtn。然后,您可以遍历 LINQ 查询的结果并为每个查询创建新的 DataRow 对象。

这里是您需要添加到您当前拥有的内容中的必要代码的快速说明:

// Step 1: Add all columns from your two DataTables to dtRtn
// (with a prefix to avoid naming collisions)
DataTable dtRtn = new DataTable();
CopyColumns(dtFormData, dtRtn, "FormData.");
CopyColumns(dtResponderDetails, dtRtn, "ResponderDetails.");

// Step 2: Build a collection containing all of the values for this result
var numFormColumns = dtFormData.Columns.Count;
var numResponderColumns = dtResponderDetails.Columns.Count;
foreach(var row in result) {
    var targetRow = new List<object>();
    PopulateRows(row.d1, numFormColumns, targetRow);
    PopulateRows(row.d2, numResponderColumns, targetRow);
    // Pass the values in as an array, which will convert it to a new DataRow
    dtRtn.Rows.Add(targetRow.ToArray());
}

//...

private void CopyColumns(DataTable sourceTable, DataTable targetTable, string rowPrefix)
{
    foreach (DataColumn column in sourceTable.Columns)
    {
        var rowName = String.Format("{0}{1}", rowPrefix, column.ColumnName);
        targetTable.Columns.Add(rowName, column.DataType);
    }
}

void PopulateRows(DataRow sourceRow, int numColumns, List<object> targetRow)
{
    for(var i = 0; i < numColumns; i++) {
        targetRow.Add(sourceRow[i]);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    相关资源
    最近更新 更多