Sometimes back while answering a DNF forum question , we came across an interesting situation where the person has asked a nice question as how to Compare two objects and then to list down the changes of the same.In this article we will address the problem and present a solution for it.
Introduction
Sometimes back while answering a DNF forum question , we came across an interesting situation where the person has asked a nice question as how to Compare two objects and then to list down the changes of the same.In this article we will address the problem and present a solution for it.
Environment Setup
So let us setup the environment first
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var originalAddress = new List<OriginalAddress>()
{
new OriginalAddress { Address = "Address 1" }
,new OriginalAddress { Address = "Address 2" }
,new OriginalAddress { Address = "Address 3" }
,new OriginalAddress { Address = "Address 4" }
,new OriginalAddress { Address = "Address 5" }
};
var presentAddress = new List<PresentAddress>()
{
new PresentAddress { Address = "Address 1" }
,new PresentAddress { Address = "New Address 2 " }
,new PresentAddress { Address = "Address 3" }
,new PresentAddress { Address = "New Address 4" }
,new PresentAddress { Address = "New Address 5" }
};
}
}
public class OriginalAddress
{
public string Address { get; set; }
}
public class PresentAddress
{
public string Address { get; set; }
}
}
We have two entities, OriginalAddress and PresentAddress. We have populated some data to those and the objective is to find out those addresses that have been changed.
Approach to solve the problem
We have two sets viz. OriginalAddress and PresentAddress. First, we will find out those elements that has been changed in second set.Next we will find out those elements that has been changed in first set.
Once done, we will merge the two sets results to get the desired result
Using the code
//Step 1: Values of First Set Changed In Second Set
var valuesofFirstSetChangedInSecondSet = originalAddress.Select(a => a.Address).Except(presentAddress.Select(c => c.Address));
//Step 2: Values of Second Set Changed In First Set
var valuesofSecondSetChangedInFirstSet = presentAddress.Select(a => a.Address).Except(originalAddress.Select(c => c.Address));
//Step 3: Merge the two sets results to get the desired result
valuesofFirstSetChangedInSecondSet
.Zip(valuesofSecondSetChangedInFirstSet, (o, p) =>
("Original Address : " + o + " Present Address : " + p)
)
.ToList()
.ForEach(i => Console.WriteLine(i + Environment.NewLine)); //print the result
We are using the EXCEPT extension method of the static Enumerable class. It produces the set difference of two sequences by using the default equality comparer to compare values.Once done, we need to merge the two sets for which we are using the ZIP extension method that merges two sequences by using the specified predicate function.

Reference
Enumerable.Zip
Conclusion
So in this article, we have seen as how we can compare two objects and list down the changes between them.Hope you enjoyed reading the article.Zipped file is attached herewith.