using System.Collections.Generic;
using System.Diagnostics;
public static void Main()
var departments = Enumerable.Range(1, 4000).OrderBy(r => rnd.NextDouble())
.Select(id => new Department()
CreatedDate = DateTime.Now
var employees = Enumerable.Range(0, 100000).Select(n => new Employee()
DepartmentId = rnd.Next(1, 4001)
var stopwatch = Stopwatch.StartNew();
var results = Run(employees, departments);
if (results.Count() != 100000)
throw new System.Exception("wrong answer");
Console.WriteLine(stopwatch.ElapsedMilliseconds);
public static List<EmployeeDepartment> Run(IEnumerable<Employee> employees, IEnumerable<Department> departments)
var results = new List<EmployeeDepartment>();
foreach (var employee in employees)
var res = new EmployeeDepartment()
Department = departments.First(d=>d.Id == employee.DepartmentId)
public int DepartmentId {get;set;}
public string Name {get;set;}
public DateTime CreatedDate {get;set;}
public class EmployeeDepartment
public Department Department {get;set;}
public Employee Employee {get;set;}