你好,我有一个方法比较2个列表的差异对象。现在这个工作,但一次只有一个属性。怎样才能获得一个列表?
这里是方法:
public SPpowerPlantList compareTwoLists(string sqlServer, string database, DateTime timestampCurrent, string noteCurrent, DateTime timestampOld, string noteOld)
{
int count = 0;
SPpowerPlantList powerPlantListCurrent = loadProjectsAndComponentsFromSqlServer(sqlServer, database, timestampCurrent, noteCurrent);
SPpowerPlantList powerPlantListOld = loadProjectsAndComponentsFromSqlServer(sqlServer, database, timestampOld, noteOld);
SPpowerPlantList powerPlantListDifferences = new SPpowerPlantList();
count = powerPlantListOld.Count - powerPlantListCurrent.Count;
var differentObjects = powerPlantListCurrent.Where(p => !powerPlantListOld.Any(l => p.mwWeb == l.mwWeb)).ToList();
foreach (var differentObject in differentObjects)
{
powerPlantListDifferences.Add(differentObject);
}
return powerPlantListDifferences;
}
这工作,我也得到在新的清单4级的对象。问题是我有一些其他属性需要比较。例如名称而不是mwWeb。当我尝试更改它时,我需要为每个新属性添加一个新列表和一个新的Foreach循环。
例如
int count = 0;
SPpowerPlantList powerPlantListCurrent = loadProjectsAndComponentsFromSqlServer(sqlServer, database, timestampCurrent, noteCurrent);
SPpowerPlantList powerPlantListOld = loadProjectsAndComponentsFromSqlServer(sqlServer, database, timestampOld, noteOld);
SPpowerPlantList powerPlantListDifferences = new SPpowerPlantList();
SPpowerPlantList powerPlantListDifferences2 = new SPpowerPlantList();
count = powerPlantListOld.Count - powerPlantListCurrent.Count;
var differentObjects = powerPlantListCurrent.Where(p => !powerPlantListOld.Any(l => p.mwWeb == l.mwWeb)).ToList();
var differentObjects2 = powerPlantListCurrent.Where(p => !powerPlantListOld.Any(l => p.shortName == l.shortName)).ToList();
foreach (var differentObject in differentObjects)
{
powerPlantListDifferences.Add(differentObject);
}
foreach (var differentObject in differentObjects2)
{
powerPlantListDifferences2.Add(differentObject);
}
return powerPlantListDifferences;
有没有办法来防止这种情况?或者制作更多的查询并且只返回1个包含所有不同对象的列表?
我试过except
和intersect
但没有奏效。 因此,任何帮助或建议将是伟大的,thx为您的时间。
PS:如果我的问题风格有问题,请对我说,因为我试图学会提出更好的问题。
我认为你需要实现的IEqualityComparer为对象。然后'除了'和'交叉'将起作用。 https://blogs.msdn.microsoft.com/mcsuksoldev/2011/04/05/linq-distinct-and-iequalitycomparer-implementation/ –
为什么不重写'Equals()'和'GetHashCode()'? – derpirscher