I do not profess to being adept with LINQ, but did give it a shot with this Proof-of-Concept and it works as I would intend it to.
It is not a 100% solution for you as is, but should be a good base to work with.
namespace ProofOfConcept {
public class Employee {
public int EmpCode { get; set; }
public string EmpName { get; set; }
public Employee() { }
public Employee(int Code, string Name) {
EmpCode = Code;
EmpName = Name;
}
}
class Program {
static void Main(string[] args) {
List<Employee> srsEmps = new List<Employee>();
srsEmps.Add(new Employee(1, "Me"));
srsEmps.Add(new Employee(2, "You"));
List<Employee> destEmps = new List<Employee>();
destEmps.Add(new Employee(2, "You"));
destEmps.Add(new Employee(3, "Someone Else"));
var Deleted =
from s in srsEmps
where !(from d in destEmps select d.EmpCode).Contains(s.EmpCode)
select s;
var Common =
from s in srsEmps
where (from d in destEmps select d.EmpCode).Contains(s.EmpCode)
select s;
var NewlyAdded =
from d in destEmps
where !(from s in srsEmps select s.EmpCode).Contains(d.EmpCode)
select d;
foreach (Employee d in Deleted) {
Console.WriteLine("Deleted = " + d.EmpName);
}
foreach (Employee c in Common) {
Console.WriteLine("Common = " + c.EmpName);
}
foreach (Employee n in NewlyAdded) {
Console.WriteLine("New = " + n.EmpName);
}
Console.WriteLine("Press any key to continue");
Console.ReadLine();
}
}
}