using System; using System.Linq; using System.Collections.Generic; using System.Diagnostics; public class Test { public static void Main() { var rnd = new Random(); var List1 = new List(); var List2 = new List(); for (int i = 0; i < 100000; i++) List1.Add(rnd.Next(100000, 1000000).ToString()); for (int i = 0; i < 500000; i++) List2.Add(rnd.Next(1000000000, int.MaxValue).ToString()); var st = new Stopwatch(); st.Start(); var match = from str1 in List1 join str2 in List2 on str1 equals (str2.Length < 6 ? str2 : str2.Substring(0, 6)) select str2; int matchCount = match.Count(); st.Stop(); Console.WriteLine("Elapsed in {0} ms. {1} matches found",st.Elapsed.TotalMilliseconds,matchCount); } }