c# - 在 C# 中使用 LINQ 进行数据表连接

标签 c# linq join datatable

我以这种方式使用 LINQ 连接两个数据表:

 DataTable targetTable = dataTable1.Clone();
 var dt2Columns = dataTable2.Columns.OfType<DataColumn>().Select(dc =>
        new DataColumn(dc.ColumnName, dc.DataType, dc.Expression, dc.ColumnMapping));
 var dt2FinalColumns = from dc in dt2Columns.AsEnumerable()
                       where targetTable.Columns.Contains(dc.ColumnName) == false
                       select dc;
 targetTable.Columns.AddRange(dt2FinalColumns.ToArray());

 var rowData = from row1 in dataTable1.AsEnumerable()
               join row2 in dataTable2.AsEnumerable()
               on row1.Field<string>("keyCol") equals row2.Field<string>("keyCol")
               select row1.ItemArray.Concat(row2.ItemArray.Where(r2 => row1.ItemArray.Contains(r2) == false)).ToArray();
 foreach (object[] values in rowData)
     targetTable.Rows.Add(values);

我在这里面临三个问题:

  1. 如果两个表的行数不同,我想传递默认值或为其他表中找不到的值分配空字符串。我该如何实现这一目标?
  2. 如果我有多个列并且需要与 AND 进行比较,这怎么可能?
  3. 如果我必须在运行时连接多个表怎么办?有没有办法生成动态LINQ?

最佳答案

如果两个表具有相同的主键 DataTable.Merge会起作用:

dataTable1.Merge(dataTable2 ,false, MissingSchemaAction.Add);

这将合并两个表的架构(列),连接具有相同主键的行并添加其他行。

关于c# - 在 C# 中使用 LINQ 进行数据表连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9947556/

相关文章:

c# - WPF和MVVM Light-通过Messenger关闭带有按钮的子窗口

c# - 使用 Linq 同时查询两个集合

c# - 在按匿名类型分组的 Entity Framework 查询中选择分组键最终会为每个分组对象返回一个键

Python:连接、字符串、迭代和 DWIM

c# - 如何将参数发送到 ICommand 的 Execute 方法

c# - 在Asp.net C#中使用jQuery Ajax插入数据[数据库MySQL]

mysql - 内部加入 php redbeans

python - 执行合并连接列的外连接

javascript - 如何使用 javascript 将谷歌地图 div 转换为图像

c# - 如何在 C# 中的泛型列表中搜索特定值?