gpt4 book ai didi

c# - 比较两个数据集 - 查找更改 - LINQ

转载 作者:太空狗 更新时间:2023-10-29 17:59:24 31 4
gpt4 key购买 nike

我已经在互联网上搜索过,试图找到解决方案,但也许我的做法不对。

我需要比较两个结构相同的数据集,并希望找到新的和更改的对象(使用 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
};

我可以在两件事上得到帮助:

  1. 是否有更有效的方法来遍历每一列,因为我计划添加更多我需要比较的属性?必须有更好的方法来动态检查 2 个相同的数据集的变化。
  2. 我如何才能看到哪些属性发生了变化?例如,为所有不相同的项目创建“Property、OriginalValue、UpdatedValue”列表?

希望这能很好地解释它。如果我没有正确看待它,请随时指出我处理这种情况的其他方法。

最佳答案

您可以使用 LINQ Except() 扩展方法。这将返回列表中的所有内容,但第二个列表中的内容除外。

var orignalContacts = GetOrignal();
var updatedContacts = GetUpdated();

var changedAndNew = updatedContacts.Except(orignalContacts);
var unchanged = orignalContacts.Except(updatedContacts);

根据您的数据提供者,您可能需要覆盖对象上的 Equals() 和 GetHashCode()。

关于c# - 比较两个数据集 - 查找更改 - LINQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18518775/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com