using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.BL.Entities; using System.Data.Entity; namespace Tango.BL.Builders { public class CatalogsCollectionBuilder : EntityCollectionBuilderBase { public CatalogsCollectionBuilder(ObservablesContext context) : base(context) { } public virtual CatalogsCollectionBuilder ForSite(String siteGuid) { return AddQueryStep(1, (query) => { if (siteGuid != null) { var siteCatalogsGuids = Context.SitesCatalogs.Where(x => x.SiteGuid == siteGuid).ToList().Select(x => x.ColorCatalogGuid).Where(x => x != null).Distinct().ToArray(); if (siteCatalogsGuids.Length > 0) { return query.Where(x => siteCatalogsGuids.Contains(x.Guid)); } else { return query; } } else { return query; } }); } public virtual CatalogsCollectionBuilder WithGroups() { return AddQueryStep(2, (query) => { return query.Include(x => x.ColorCatalogsGroups); }); } public virtual CatalogsCollectionBuilder WithItems() { return AddQueryStep(3, (query) => { return query.Include(x => x.ColorCatalogsGroups.Select(y => y.ColorCatalogsItems)); }); } public virtual CatalogsCollectionBuilder WithRecipes(Rml rml = null) { return AddQueryStep(4, (query) => { if (rml != null) { return query.Include(x => x.ColorCatalogsGroups.Select(y => y.ColorCatalogsItems.Select(z => z.ColorCatalogsItemsRecipes.Where(r => r.RmlGuid == rml.Guid)))); } else { return query.Include(x => x.ColorCatalogsGroups.Select(y => y.ColorCatalogsItems.Select(z => z.ColorCatalogsItemsRecipes))); } }); } } }