Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 两个数据表的唯一数据列比较_C#_Linq_Lambda - Fatal编程技术网

C# 两个数据表的唯一数据列比较

C# 两个数据表的唯一数据列比较,c#,linq,lambda,C#,Linq,Lambda,我有两个具有相同列设置的数据表。表“原件”用作与表“已编辑”进行比较的副本,表中包含的数据基本相同,但某些行可能已由用户编辑。 “编辑”表格可由用户在Excel中自由编辑,因此采用双表系统 这些表可能分别具有不同的主键。唯一的列值 编辑完成后,我需要比较两个表。 如果唯一列值已更改,我需要将该行视为新行,即使用INSERT而不是稍后对sql server的更新查询。 如果更改了除唯一列值以外的任何其他列值,将导致更新查询 我已经有了lambda表达式,假设unique列是表中的第一列 var o

我有两个具有相同列设置的数据表。表“原件”用作与表“已编辑”进行比较的副本,表中包含的数据基本相同,但某些行可能已由用户编辑。 “编辑”表格可由用户在Excel中自由编辑,因此采用双表系统

这些表可能分别具有不同的主键。唯一的列值

编辑完成后,我需要比较两个表。 如果唯一列值已更改,我需要将该行视为新行,即使用INSERT而不是稍后对sql server的更新查询。 如果更改了除唯一列值以外的任何其他列值,将导致更新查询

我已经有了lambda表达式,假设unique列是表中的第一列

var oldRows original.AsEnumerable()
    .Where(r=> !edited.AsEnumerable()
        .Any(r2 => r[0].ToString().Trim().ToLower() == r2[0].ToString().Trim().ToLower()));

var newRows edited.AsEnumerable()
    .Where(r=> !original.AsEnumerable() 
        .Any(r2 => r[0].ToString().Trim().ToLower() == r2[0].ToString().Trim().ToLower()));
然而,现在的要求已经改变为改变唯一列的计数和位置。 我可以用linq获得所有唯一的列,但无法真正解决如何连接这两个操作

var uniqueColumns from DataColumn c in original.Columns where c.Unique select c; 
有没有人建议如何将其转化为表达式