Wednesday, 24 May 2017

C# compare two List collection objects

namespace MyPOC
{
partial class TestLists
{
public void GetDeltaData()
{
List<Emp> listSource = new List<Emp>();
listSource.Add(new Emp() { EmpID = 4, EmpName = "D" });
listSource.Add(new Emp() { EmpID = 1, EmpName = "A1" });
listSource.Add(new Emp() { EmpID = 2, EmpName = "B" });
List<Emp> listTarget = new List<Emp>();
listTarget.Add(new Emp() { EmpID = 1, EmpName = "A", isActive = true });
listTarget.Add(new Emp() { EmpID = 3, EmpName = "C", isActive = true });
listTarget.Add(new Emp() { EmpID = 2, EmpName = "B", isActive = true });
List<Emp> listDelta = new List<Emp>();
bool isExistInTraget = false;
//loop tr all listSource
foreach (var sour in listSource)
{
//loop tr all listTarget
foreach (var tar in listTarget)
{
if (tar.EmpID == sour.EmpID)
{
isExistInTraget = true;
if (tar.EmpName != sour.EmpName)
{
//Add EmpID, EmpName to listDelta and Active = true from source// This is update action
listDelta.Add(new Emp() { EmpID = sour.EmpID, EmpName = sour.EmpName, isActive = true });
//remove tar from listTarget
listTarget.Remove(tar);
}
else
{
//remove tar from listTarget
listTarget.Remove(tar);
}
break;
}
}
if (!isExistInTraget)
{
//New item from listSource
//Add EmpID, EmpName to listDelta and Active=true
listDelta.Add(new Emp() { EmpID = sour.EmpID, EmpName = sour.EmpName, isActive = true });
}
}
//By this time: listTarget will have only records, which are not there in Source system, mean we have to deactivate these records from Target
foreach (var tar in listTarget)
{
//Add each record to listDelta by Active=false
listDelta.Add(new Emp() { EmpID = tar.EmpID, EmpName = tar.EmpName, isActive = false });
}
}
}
public class Emp
{
public int EmpID { get; set; }
public string EmpName { get; set; }
public bool isActive { get; set; }
}
}
view raw gistfile1.txt hosted with ❤ by GitHub