【问题标题】:comparing 2 lists of objects and return changes in the new list比较 2 个对象列表并在新列表中返回更改
【发布时间】:2015-12-15 00:47:39
【问题描述】:

我有一个 Web 应用程序,它为用户提供了在同一页面上更新(不删除或添加)多条记录的功能。当用户提交更改时,我从数据库中提取原始列表并使用 linq 将其与更新后的列表进行比较。任何更改的记录都将被放入一个新列表并发送到数据库进行更新。 下面是我要比较的代码。当我调试时,我可以看到 2 个列表是不同的,但代码返回差异,比较器 = null、第一个 = null、第二个 = null。大佬们能找出bug吗?

var Differences = OriginalList.Where(x => !NewList.Any(x1 => x1.ServiceName == x.ServiceName
                                                        && x1.ServiceDescription == x.ServiceDescription
                                                        && x1.ServiceURL == x.ServiceURL
                                                        && x1.OrderIndex == x.OrderIndex
                                                        && x1.GroupID == x.GroupID
                                                        && x1.Active == x.Active))
        .Union(NewList.Where(x => !OriginalList.Any(x1 => x1.ServiceName == x.ServiceName
                                                        && x1.ServiceDescription == x.ServiceDescription
                                                        && x1.ServiceURL == x.ServiceURL
                                                        && x1.OrderIndex == x.OrderIndex
                                                        && x1.GroupID == x.GroupID
                                                        && x1.Active == x.Active)));

return Differences;

【问题讨论】:

  • 您是否有理由不使用 Linq except 方法来找出差异?有一个重载来指定如何比较对象相等性(或者您可以在 x1 后面的对象上覆盖 Equals)。
  • 原因是我变得无能。我养成了一个坏习惯,不去测试代码进行更改以使其变得更好。谢谢你的提示,伙计。
  • 啊。我想我们都去过那里。如果我每次写一些我认为很聪明的东西时都有一角钱,只是发现它在实际框架中的某个地方得到了更好的实现……我会有很多一角钱……:)

标签: c# linq


【解决方案1】:

您可能正在寻找 Linq 的 except 方法。 https://msdn.microsoft.com/library/bb300779(v=vs.100).aspx

您需要定义如何比较“x1”对象的相等性。可能最简单的方法是覆盖Equals():
https://msdn.microsoft.com/en-us/library/ms173147(v=vs.80).aspx

然后要获得差异,您只需这样做:

var Differences = OriginalList.Except(NewList);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-26
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多