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<string>();
var List2 = new List<string>();
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);
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uTGlucTsKdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7CnVzaW5nIFN5c3RlbS5EaWFnbm9zdGljczsKCnB1YmxpYyBjbGFzcyBUZXN0CnsKIAoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewogICAgICAgICAgIHZhciBybmQgPSBuZXcgUmFuZG9tKCk7CiAgICAgICAgICAgIHZhciBMaXN0MSA9IG5ldyBMaXN0PHN0cmluZz4oKTsgCiAgICAgICAgICAgIHZhciBMaXN0MiA9IG5ldyBMaXN0PHN0cmluZz4oKTsgCiAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspCiAgICAgICAgICAgICAgICBMaXN0MS5BZGQocm5kLk5leHQoMTAwMDAwLCAxMDAwMDAwKS5Ub1N0cmluZygpKTsKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1MDAwMDA7IGkrKykKICAgICAgICAgICAgICAgIExpc3QyLkFkZChybmQuTmV4dCgxMDAwMDAwMDAwLCBpbnQuTWF4VmFsdWUpLlRvU3RyaW5nKCkpOwoKICAgICAgICAgICAgdmFyIHN0ID0gbmV3IFN0b3B3YXRjaCgpOwogICAgICAgICAgICBzdC5TdGFydCgpOwogICAgICAgICAgICB2YXIgbWF0Y2ggPSBmcm9tIHN0cjEgaW4gTGlzdDEKICAgICAgICAgICAgICAgICAgICAgICAgam9pbiBzdHIyIGluIExpc3QyCiAgICAgICAgICAgICAgICAgICAgICAgIG9uIHN0cjEgZXF1YWxzIChzdHIyLkxlbmd0aCA8IDYgPyBzdHIyIDogc3RyMi5TdWJzdHJpbmcoMCwgNikpCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCBzdHIyOwoKICAgICAgICAgICAgaW50IG1hdGNoQ291bnQgPSBtYXRjaC5Db3VudCgpOwogICAgICAgICAgICBzdC5TdG9wKCk7CiAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJFbGFwc2VkIGluIHswfSBtcy4gezF9IG1hdGNoZXMgZm91bmQiLHN0LkVsYXBzZWQuVG90YWxNaWxsaXNlY29uZHMsbWF0Y2hDb3VudCk7Cgl9ICAgCn0KCiAgICAK