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

标签 c# linq

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

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

相关文章:

javascript - UWP Web View : add tags to selected text

LINQ to Twitter 支持 Xamarin.iOS?

javascript - 从数据表创建复杂的 json C#

c# - 使用 Roslyn 编译器重定向控制台和调试输出

c# - 在 C# 中使用 'DefaultAudioEndpoint' 以外的音频端点

c# - 应用程序关闭时的 Xamarin.Forms iOS PushNotification

c# - 如何在 Rows.Add 之后触发 DataTable NewRow 事件

c# - 选择无法打印到控制台

c# - 如何从 SQL 查询 C# 获取所有值

c# - 实体'不包含带有 1 个参数的构造函数