public IEnumerable <ShopItem> Search(int categoryType, int partType, int heroType)
        {
            var list = Values.AsEnumerable();

            list = list.Where(p => p.Enable && p.CategoryType == categoryType);
            if (categoryType == ShopCategoryType.Parts)
            {
                if (partType == ItemPartType.Set)
                {
                    var set = _itemPartDataStore.ByHero(heroType);
                    list = list.Where(p => p.Item0 > 0 && p.Item1 > 0 && set.Contains(p.Item1));
                }
                else
                {
                    var set = _itemPartDataStore.ByTypeAndHero(partType, heroType);
                    list = list.Where(p => p.Item1 == 0 && set.Contains(p.Item0));
                }
            }
            else if (categoryType == ShopCategoryType.HouseDecoration)
            {
                var set = _houseDecorationDataStore.ByKind(partType);
                list = list.Where(p => set.Contains(p.Item0));
            }
            else if (categoryType == ShopCategoryType.Recipe)
            {
                var set = _recipeDataStore.ByKindAndHero(partType, heroType);
                list = list.Where(p => set.Contains(p.Item0));
            }
            else if (categoryType == ShopCategoryType.Enchant)
            {
                var set = _enchantDataStore.ByKind(partType);
                list = list.Where(p => set.Contains(p.Item0));
            }
            else if (categoryType == ShopCategoryType.Lottery)
            {
                list = list.Where(p => p.PriceType == partType);
            }
            return(list);
        }