using System.Collections.Generic;
private static int TotalCycles;
public static void Main()
var LstCyclces = new List<Cycle>();
cycle.Cars = new List<Car>();
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 });
cycle.Cars = new List<Car>();
cycle.Cars.Add(new Car { CarId = 1, Location = 40 });
cycle.Cars.Add(new Car { CarId = 2, Location = 57 });
cycle.Cars.Add(new Car { CarId = 3, Location = 100 });
cycle.Cars.Add(new Car { CarId = 4, Location = 7 });
cycle.Cars.Add(new Car { CarId = 7, Location = 2 });
cycle.Cars = new List<Car>();
cycle.Cars.Add(new Car { CarId = 1, Location = 40 });
cycle.Cars.Add(new Car { CarId = 2, Location = 5 });
cycle.Cars.Add(new Car { CarId = 4, Location = 1 });
cycle.Cars.Add(new Car { CarId = 9, Location = 7 });
var query = LstCyclces.FirstOrDefault(c => c.CycleNum == cycleToCheck).Cars
.Where(c => LstCyclces.FirstOrDefault(p => p.CycleNum == cycleToCheck - 1).Cars
.Any(ca => ca.CarId == c.CarId && Math.Abs(c.Location - ca.Location) < 40));
var result = query.SelectMany(t1 => query.Select(t2 => Tuple.Create(t1, t2)))
.Where(x => Math.Abs(x.Item1.Location - x.Item2.Location) < 65 && x.Item1.CarId < x.Item2.CarId);
foreach (var r in result)
Console.WriteLine("{0} - {1}", r.Item1.CarId, r.Item2.CarId);
public readonly int CycleNum;
this.CycleNum = (++TotalCycles);