我已经在互联网上搜索了很久,试图找到一个解决方案,也许我的方法不对。
我需要比较两个相同结构的数据集,并希望使用LINQ查找新对象和更改的对象。
使用我在CodeProject中找到的内容,我能够汇总出一份已更改项目的列表,但这是通过硬编码每个列(而且会有很多)并检查相同的值来完成的。
我需要帮助解决两个问题:
我需要比较两个相同结构的数据集,并希望使用LINQ查找新对象和更改的对象。
使用我在CodeProject中找到的内容,我能够汇总出一份已更改项目的列表,但这是通过硬编码每个列(而且会有很多)并检查相同的值来完成的。
var updRec = from u in updated
join o in orig
on u.KeyValue equals o.KeyValue
where
(o.Propery1 != u.Propery1) ||
(o.Propery2 != u.Propery2)
select new record
{
KeyValue = u.KeyValue,
Propery1 = u.Propery1,
Propery2 = u.Propery2 ,
RecordType = "mod" // Modified
};
我需要帮助解决两个问题:
- 是否有更高效的方法循环遍历每一列,因为我计划添加许多需要比较的属性?必须有更好的方法动态检查两个相同的数据集是否有更改。
- 如何查看哪个属性已更改?例如,创建一个“属性,原始值,更新值”列表,其中包含所有不相同的项目?
record
对象中重写Equals()
方法并在那里进行比较。然后你可以将你的where
子句更改为where o.Equals(u)
。但这只是将比较移动到一个更封装的地方。如果你想要更多的自动化,你可能需要使用反射。 - Daniel Gabriel