public SearchResults LookupSearch(SearchOptions options) { //Intitialize search result SearchResults results = new SearchResults() { ColorCounts = new List <ColorCount>(), SizeCounts = new List <SizeCount>(), Shirts = new List <Shirt>() }; // Convert to Lookup Stopwatch sw = new Stopwatch(); sw.Start(); var shirtsLookup = _shirts.ToLookup(x => new { x.Color, x.Size }); sw.Stop(); results.Milliseconds = sw.ElapsedMilliseconds; //Search if (options != null) { foreach (Color color in options.Colors) { ColorCount colorCount = new ColorCount() { Color = color, Count = 0 }; foreach (Size sz in Size.All) { var colourMatchedShirts = shirtsLookup[new { Color = color, Size = sz }]; if (options.Sizes.Contains(sz) && options.Sizes.Count > 0) { if (colourMatchedShirts.Count() > 0) { colorCount.Count += colourMatchedShirts.Count(); results.Shirts.AddRange(colourMatchedShirts.ToList <Shirt>()); SizeCount sizeCount = results.SizeCounts.Find(item => item.Size.Name.Equals(sz.Name)); if (sizeCount == null) { results.SizeCounts.Add(new SizeCount { Size = sz, Count = colourMatchedShirts.Count() }); } else { sizeCount.Count++; } } } else if (options.Sizes.Count == 0) { colorCount.Count += colourMatchedShirts.Count(); } } results.ColorCounts.Add(colorCount); } } return(results); }