private bool IsColorSpecified(SearchOptions options)
 {
     return(options.Colors != null && options.Colors.Count > 0 ? true : false);
 }
        private void SearchWithSizeAndColor(SearchOptions options, SearchResults searchResult)
        {
            foreach (var color in options.Colors)
            {
                foreach (var size in options.Sizes)
                {
                    switch (color.Name + size.Name)
                    {
                    case "BlackSmall":
                        var countBlackSmall = _sortedShirts["BlackSmall"].Count();
                        searchResult.Shirts.AddRange(_sortedShirts["BlackSmall"]);
                        searchResult.SizeCounts.Where(x => x.Size == Size.Small).FirstOrDefault().Count    += countBlackSmall;
                        searchResult.ColorCounts.Where(x => x.Color == Color.Black).FirstOrDefault().Count += countBlackSmall;
                        break;

                    case "BlackMedium":
                        var countBlackMedium = _sortedShirts["BlackMedium"].Count();
                        searchResult.Shirts.AddRange(_sortedShirts["BlackMedium"]);
                        searchResult.SizeCounts.Where(x => x.Size == Size.Medium).FirstOrDefault().Count   += countBlackMedium;
                        searchResult.ColorCounts.Where(x => x.Color == Color.Black).FirstOrDefault().Count += countBlackMedium;
                        break;

                    case "BlackLarge":
                        var countBlackLarge = _sortedShirts["BlackLarge"].Count();
                        searchResult.Shirts.AddRange(_sortedShirts["BlackLarge"]);
                        searchResult.SizeCounts.Where(x => x.Size == Size.Large).FirstOrDefault().Count    += countBlackLarge;
                        searchResult.ColorCounts.Where(x => x.Color == Color.Black).FirstOrDefault().Count += countBlackLarge;
                        break;

                    case "WhiteSmall":
                        var countWhiteSmall = _sortedShirts["WhiteSmall"].Count();
                        searchResult.Shirts.AddRange(_sortedShirts["WhiteSmall"]);
                        searchResult.SizeCounts.Where(x => x.Size == Size.Small).FirstOrDefault().Count    += countWhiteSmall;
                        searchResult.ColorCounts.Where(x => x.Color == Color.White).FirstOrDefault().Count += countWhiteSmall;
                        break;

                    case "WhiteMedium":
                        var countWhiteMedium = _sortedShirts["WhiteMedium"].Count();
                        searchResult.Shirts.AddRange(_sortedShirts["WhiteMedium"]);
                        searchResult.SizeCounts.Where(x => x.Size == Size.Medium).FirstOrDefault().Count   += countWhiteMedium;
                        searchResult.ColorCounts.Where(x => x.Color == Color.White).FirstOrDefault().Count += countWhiteMedium;

                        break;

                    case "WhiteLarge":
                        var countWhiteLarge = _sortedShirts["WhiteLarge"].Count();
                        searchResult.Shirts.AddRange(_sortedShirts["WhiteLarge"]);
                        searchResult.SizeCounts.Where(x => x.Size == Size.Large).FirstOrDefault().Count    += countWhiteLarge;
                        searchResult.ColorCounts.Where(x => x.Color == Color.White).FirstOrDefault().Count += countWhiteLarge;

                        break;

                    case "YellowSmall":
                        var countYellowSmall = _sortedShirts["YellowSmall"].Count();
                        searchResult.Shirts.AddRange(_sortedShirts["YellowSmall"]);
                        searchResult.SizeCounts.Where(x => x.Size == Size.Small).FirstOrDefault().Count     += countYellowSmall;
                        searchResult.ColorCounts.Where(x => x.Color == Color.Yellow).FirstOrDefault().Count += countYellowSmall;

                        break;

                    case "YellowMedium":
                        var countYellowMedium = _sortedShirts["YellowMedium"].Count();
                        searchResult.Shirts.AddRange(_sortedShirts["YellowMedium"]);
                        searchResult.SizeCounts.Where(x => x.Size == Size.Medium).FirstOrDefault().Count    += countYellowMedium;
                        searchResult.ColorCounts.Where(x => x.Color == Color.Yellow).FirstOrDefault().Count += countYellowMedium;

                        break;

                    case "YellowLarge":
                        var countYellowLarge = _sortedShirts["YellowLarge"].Count();
                        searchResult.Shirts.AddRange(_sortedShirts["YellowLarge"]);
                        searchResult.SizeCounts.Where(x => x.Size == Size.Large).FirstOrDefault().Count     += countYellowLarge;
                        searchResult.ColorCounts.Where(x => x.Color == Color.Yellow).FirstOrDefault().Count += countYellowLarge;

                        break;

                    case "BlueSmall":
                        var countBlueSmall = _sortedShirts["BlueSmall"].Count();
                        searchResult.Shirts.AddRange(_sortedShirts["BlueSmall"]);
                        searchResult.SizeCounts.Where(x => x.Size == Size.Small).FirstOrDefault().Count   += countBlueSmall;
                        searchResult.ColorCounts.Where(x => x.Color == Color.Blue).FirstOrDefault().Count += countBlueSmall;

                        break;

                    case "BlueMedium":
                        var countBlueMedium = _sortedShirts["BlueMedium"].Count();
                        searchResult.Shirts.AddRange(_sortedShirts["BlueMedium"]);
                        searchResult.SizeCounts.Where(x => x.Size == Size.Medium).FirstOrDefault().Count  += countBlueMedium;
                        searchResult.ColorCounts.Where(x => x.Color == Color.Blue).FirstOrDefault().Count += countBlueMedium;

                        break;

                    case "BlueLarge":
                        var countBlueLarge = _sortedShirts["BlueLarge"].Count();
                        searchResult.Shirts.AddRange(_sortedShirts["BlueLarge"]);
                        searchResult.SizeCounts.Where(x => x.Size == Size.Large).FirstOrDefault().Count   += countBlueLarge;
                        searchResult.ColorCounts.Where(x => x.Color == Color.Blue).FirstOrDefault().Count += countBlueLarge;

                        break;

                    case "RedSmall":
                        var countRedSmall = _sortedShirts["RedSmall"].Count();
                        searchResult.Shirts.AddRange(_sortedShirts["RedSmall"]);
                        searchResult.SizeCounts.Where(x => x.Size == Size.Small).FirstOrDefault().Count  += countRedSmall;
                        searchResult.ColorCounts.Where(x => x.Color == Color.Red).FirstOrDefault().Count += countRedSmall;

                        break;

                    case "RedMedium":
                        var countRedMedium = _sortedShirts["RedMedium"].Count();
                        searchResult.Shirts.AddRange(_sortedShirts["RedMedium"]);
                        searchResult.SizeCounts.Where(x => x.Size == Size.Medium).FirstOrDefault().Count += countRedMedium;
                        searchResult.ColorCounts.Where(x => x.Color == Color.Red).FirstOrDefault().Count += countRedMedium;

                        break;

                    case "RedLarge":
                        var countRedLarge = _sortedShirts["RedLarge"].Count();
                        searchResult.Shirts.AddRange(_sortedShirts["RedLarge"]);
                        searchResult.SizeCounts.Where(x => x.Size == Size.Large).FirstOrDefault().Count  += countRedLarge;
                        searchResult.ColorCounts.Where(x => x.Color == Color.Red).FirstOrDefault().Count += countRedLarge;

                        break;

                    default:
                        break;
                    }
                }
            }
        }
 private bool IsSizeSpecified(SearchOptions options)
 {
     return(options.Sizes != null && options.Sizes.Count > 0 ? true : false);
 }
Beispiel #4
0
 private List <SizeCount> GetShirtCountBySize(SearchOptions options)
 {
     return(Size.All.Select(size => new SizeCount {
         Size = size, Count = _lookupGroupedBySize[size.Id].Count(shirt => shirt.Size.Id == size.Id && (!options.Colors.Any() || options.Colors.Select(c => c.Id).Contains(shirt.Color.Id)))
     }).ToList());
 }
Beispiel #5
0
 private List <ColorCount> GetShirtCountByColor(SearchOptions options)
 {
     return(Color.All.Select(color => new ColorCount {
         Color = color, Count = _lookupGroupedByColor[color.Id].Count(shirt => shirt.Color.Id == color.Id && (!options.Sizes.Any() || options.Sizes.Select(s => s.Id).Contains(shirt.Size.Id)))
     }).ToList());
 }
Beispiel #6
0
 private static bool ThereOnlyColorOptions(SearchOptions options)
 {
     return(options.Colors != null && options.Colors.Any() && (options.Sizes == null || !options.Sizes.Any()));
 }
Beispiel #7
0
 private static bool ThereAreBothSizeAndColorOptions(SearchOptions options)
 {
     return(options.Colors != null && options.Sizes != null);
 }
Beispiel #8
0
        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);
        }