比较2个对象列表并返回新列表中的更改

时间:2015-12-15 00:47:39

标签: c# linq

我有一个网络应用程序,它为用户提供了在同一页面上更新(不删除或添加)多个记录的功能。当用户提交更改时,我从数据库中提取原始列表并使用linq将其与更新列表进行比较。任何更改的记录都将放在新列表中并发送到数据库进行更新。 下面是我要比较的代码。在调试时,我可以看到2个列表不同,但代码返回差异,comparer = null,first = null,second = null。你们能发现这个漏洞吗?

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;

1 个答案:

答案 0 :(得分:4)

您可能正在寻找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);