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); }