private IQueryable <Product> ApplyLoadFlags(IQueryable <Product> query, ProductLoadFlags flags)
        {
            if (flags.HasFlag(ProductLoadFlags.WithAttributeCombinations))
            {
                query = query.Include(x => x.ProductVariantAttributeCombinations);
            }

            if (flags.HasFlag(ProductLoadFlags.WithBundleItems))
            {
                query = query.Include(x => x.ProductBundleItems.Select(y => y.Product));
            }

            if (flags.HasFlag(ProductLoadFlags.WithCategories))
            {
                query = query.Include(x => x.ProductCategories.Select(y => y.Category));
            }

            if (flags.HasFlag(ProductLoadFlags.WithDiscounts))
            {
                query = query.Include(x => x.AppliedDiscounts);
            }

            if (flags.HasFlag(ProductLoadFlags.WithManufacturers))
            {
                query = query.Include(x => x.ProductManufacturers.Select(y => y.Manufacturer));
            }

            if (flags.HasFlag(ProductLoadFlags.WithPictures))
            {
                query = query.Include(x => x.ProductPictures);
            }

            if (flags.HasFlag(ProductLoadFlags.WithReviews))
            {
                query = query.Include(x => x.ProductReviews);
            }

            if (flags.HasFlag(ProductLoadFlags.WithSpecificationAttributes))
            {
                query = query.Include(x => x.ProductSpecificationAttributes.Select(y => y.SpecificationAttributeOption));
            }

            if (flags.HasFlag(ProductLoadFlags.WithTags))
            {
                query = query.Include(x => x.ProductTags);
            }

            if (flags.HasFlag(ProductLoadFlags.WithTierPrices))
            {
                query = query.Include(x => x.TierPrices);
            }

            if (flags.HasFlag(ProductLoadFlags.WithAttributes))
            {
                query = query.Include(x => x.ProductVariantAttributes.Select(y => y.ProductAttribute));
            }

            if (flags.HasFlag(ProductLoadFlags.WithAttributeValues))
            {
                query = query.Include(x => x.ProductVariantAttributes.Select(y => y.ProductVariantAttributeValues));
            }

            if (flags.HasFlag(ProductLoadFlags.WithDeliveryTime))
            {
                query = query.Include(x => x.DeliveryTime);
            }

            return(query);
        }