我很难过这个。Linq将DataTable与动态添加的主键合并在一起
我试图将两个DataTable
合并成一个。最好我会用linq
来执行这个任务,但问题是我需要动态地为连接添加条件。每个表的数据来自两个不同的存储过程调用,并且可以切换使用哪些调用。结果可以因列数和主键可用而有所不同。
目标是将第一个结果集中的常规字符串替换为可包含unicode的第二个数据库(但仅当它包含该特定主键组合的值时)。
我的LINQ查询应该是这样的:
var joined = (from DataRow reg in dt1.Rows
join DataRow uni in dt2.Rows
on new { prim1 = reg.ItemArray[0], prim2 = reg.ItemArray[1] }
equals new { prim1 = uni.ItemArray[0], prim2 = uni.ItemArray[1] }
select new
{
prim1 = reg.ItemArray[0],
prim2 = reg.ItemArray[1],
value1 = reg.ItemArray[4],
value2 = uni.ItemArray[3] ?? reg.ItemArray[3]
}
);
这完全适用于我想要什么,但正如我所说,我需要能够定义其在每个表中的列是主键,所以这一点:
join DataRow uni in dt2.Rows
on new { prim1 = reg.ItemArray[0], prim2 = reg.ItemArray[1] }
equals new { prim1 = uni.ItemArray[0], prim2 = uni.ItemArray[1] }
需要的东西来代替,如创建表之间或执行linq
动态地添加的主键之前DataRelation
。
ALSO,我需要选择像SQLS *
而不是指定每一列,因为我不知道列的第一个结果集数。
我也尝试通过添加主键并进行合并来连接表,但是我该如何选择dt2中的哪一列来覆盖dt1中的哪一个?
DataTable join = new DataTable("joined");
join = dt1.Copy();
join.Merge(dt2, false, MissingSchemaAction.Add);
join.AcceptChanges();
我正在使用VS2012。