好的,所以我需要获取两个数据行的键值配对差异。简而言之,我正在发送一封电子邮件,让用户知道他们对其个人资料进行了特定更改。我已经知道行是不同的,因为我正在使用SequenceEqual
来确定。
目前我已经编写并调试了以下代码:
if (currentRow.ItemArray.SequenceEqual(updatedRow)) { return; }
var updates = currentRow.ItemArray
.Where((o, i) =>
{
if (o == null && updatedRow[i] == null) { return false; }
else if (o == null && updatedRow[i] != null) { return true; }
else if (o.Equals(updatedRow[i])) { return false; }
return true;
})
.Select((o, i) =>
{
return new AppServices.NotificationData
{
Key = updatedRow.Table.Columns[i].ColumnName,
Value = Convert.ToString(updatedRow[i])
};
}).ToList();
但是这段代码有两个问题:
- 这对我来说似乎效率很低,因为它会遍历 中的每个值,
ItemArray
然后在值不同时构建一个键值对。 - 它实际上不起作用,因为
i
发送到的Select
不正确(例如,如果第二列更改,1
则发送到的索引Select
实际上是0
. 老实说,这是有道理的,但我不确定如何得到我想要的想在这里。
约束:我想在这里使用 LINQ。
注意:我只比较两行(即它不会通过行列表)。
对于我在这里尝试做的事情,合适的 LINQ 语句是什么?
更新:真的感觉我只需要使用:
currentRow.ItemArray.Intersect(updatedRow.ItemArray)
但问题是我不知道那是什么字段,所以我无法构建键值对。换句话说,我只取回差异,但我不知道索引是什么,所以我无法根据这些值获取列名。