using System; using System.Collections; using System.Collections.Generic; using System.Linq; public class Test {class Car { public int CarId; public int Location ; } static int TotalCycles=0; class Cycle { public int CycleNum; public List Cars; public Cycle () { CycleNum=(++TotalCycles); } } class MyEqualityComparer : IEqualityComparer { public bool Equals(Car item1, Car item2) { if(object.ReferenceEquals(item1, item2)) return true; if(item1 == null || item2 == null) return false; return item1.CarId.Equals(item2.CarId) ; } public int GetHashCode(Car car) { //Check whether the object is null if (Object.ReferenceEquals(car, null)) return 0; //Get hash code for the Code field. int hashcarCode = car.CarId.GetHashCode(); //Calculate the hash code for the car. return hashcarCode; } } public static void Main() { List LstCyclces = new List(); Cycle cycle =null; cycle = new Cycle();//cycle 1 cycle.Cars = new List(); cycle.Cars.Add(new Car {CarId=1 , Location=40}); cycle.Cars.Add(new Car {CarId=2 , Location=21}); cycle.Cars.Add(new Car {CarId=3 , Location=5}); cycle.Cars.Add(new Car {CarId=4 , Location=15}); LstCyclces.Add(cycle); cycle = new Cycle();//cycle2 cycle.Cars = new List(); cycle.Cars.Add(new Car {CarId=1 , Location=40}); //same location cycle.Cars.Add(new Car {CarId=2 , Location=57});//changed location cycle.Cars.Add(new Car {CarId=3 , Location=100});//changed location cycle.Cars.Add(new Car {CarId=4 , Location=7});//changed location cycle.Cars.Add(new Car {CarId=7 , Location=2});//new attended ( vs previous cycle) LstCyclces.Add(cycle); cycle = new Cycle();//cycle3 cycle.Cars = new List(); cycle.Cars.Add(new Car {CarId=1 , Location=40}); //same cycle.Cars.Add(new Car {CarId=2 , Location=5});//changed Location cycle.Cars.Add(new Car {CarId=4 , Location=1});//changed Location cycle.Cars.Add(new Car {CarId=9 , Location=7});//new attended ( vs previous cycle) LstCyclces.Add(cycle); var cycleToCheck=2; var requestedCycleCars = LstCyclces.Where(c=>c.CycleNum==cycleToCheck).SelectMany(c=>c.Cars); var previousCycleCars = LstCyclces.Where(c=>c.CycleNum==cycleToCheck-1).SelectMany(c=>c.Cars); //requestedCycleCars.Intersect(previousCycleCars,new MyEqualityComparer()); } }