gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 11:24:24 24 4
gpt4 key购买 nike

我以这种方式使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com