我有一个网络应用程序,它为用户提供了在同一页面上更新(不删除或添加)多个记录的功能。当用户提交更改时,我从数据库中提取原始列表并使用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;
答案 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);