我正在尝试编写一个进行数据比较的api。我动态地得到2个表(相同的模式)。用户还将传递支持多列PrimaryKey的主键。
我需要进行行比较,只返回第一个表中的额外行。
截至目前 我可以检查架构是否匹配,如果两者不匹配,我可以通过异常检查 检查PrimaryKey(DataColumn []类型)中的所有列,如果缺少任何列,则抛出异常。
然后为了避免重复的行,我设置了DataTable PrimaryKey,用户在try catch中传递了PrimaryKey,并在它失败的情况下抛出异常(如果表中有任何重复的Pks,则会失败)
现在被困在A-B。我可以编写简单的SQL来完成这项工作:
Select A.Id, A.Name
From SampleDB..Emp1 A Left Outer Join SampleDB..Emp2 B On A.Id = B.Id
Where B.Id is null
在我的情况下,A.Id = B.Id 是动态的。如果它是多列主键,我需要使这部分动态化。
我有一个实现,这种硬编码在我的情况下不起作用
以下是代码:
var tablesJoinend = from t1 in MasterSource.Rows.Cast<DataRow>()
join t2 in TargetSource.Rows.Cast<DataRow>() on t1["yourcolumn"] equals t2["yourcolumn"]
select t1;
DataTable output = tablesJoinend.CopyToDataTable();
在此连接条件下变为硬编码。对于我的情况,我需要基于primaryKey
使其动态化有关如何使用c#的建议吗?