【发布时间】: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)。
-
原因是我变得无能。我养成了一个坏习惯,不去测试代码进行更改以使其变得更好。谢谢你的提示,伙计。
-
啊。我想我们都去过那里。如果我每次写一些我认为很聪明的东西时都有一角钱,只是发现它在实际框架中的某个地方得到了更好的实现……我会有很多一角钱……:)