using System.Collections.Generic;
using System.Diagnostics;
public static void Main(string[] args)
var userProfiles = GenerateUserProfiles();
var idList = GenerateIds();
var idsHashSet = idList.ToHashSet();
var a = idsHashSet.Count;
var stopWatch = new Stopwatch();
userProfiles.Join(idList, up => up.ID, id => id, (up, id) => up).ToArray();
Console.WriteLine("Elapsed .Join with list time: {0}", stopWatch.Elapsed);
userProfiles.Where(up => idList.Contains(up.ID)).ToArray();
Console.WriteLine("Elapsed .Where .Contains with list time: {0}", stopWatch.Elapsed);
Console.WriteLine("-----------------------------");
userProfiles.Join(idsHashSet, up => up.ID, id => id, (up, id) => up).ToArray();
Console.WriteLine("Elapsed .Join time with HashSet: {0}", stopWatch.Elapsed);
userProfiles.Where(up => idsHashSet.Contains(up.ID)).ToArray();
Console.WriteLine("Elapsed .Where2 .Contains with HashSet time: {0}", stopWatch.Elapsed);
private static IEnumerable<int> GenerateIds()
for (int i = 10000; i > 0; i--)
private static IEnumerable<Invoice> GenerateUserProfiles()
for (int i = 0; i < 10000; i++)
yield return new Invoice {ID = i};
public int ID {get; set; }