public SpontaneouslyInventedFilterContainer(MemoryCatalogueRepository repo, IContainer[] subContainersIfAny, IFilter[] filtersIfAny, FilterContainerOperation operation) : base(repo)
        {
            repo.InsertAndHydrate(this, new Dictionary <string, object>());

            if (subContainersIfAny != null)
            {
                foreach (IContainer container in subContainersIfAny)
                {
                    AddChild(container);
                }
            }


            if (filtersIfAny != null)
            {
                foreach (IFilter filter in filtersIfAny)
                {
                    if (filter is SpontaneouslyInventedFilter)
                    {
                        AddChild(filter);
                    }
                    else
                    {
                        AddChild(new SpontaneouslyInventedFilter(repo, this, filter.WhereSQL, filter.Name, filter.Description, filter.GetAllParameters()));
                    }
                }
            }

            Operation = operation;
        }
        /// <summary>
        /// Creates a new temporary (unsaveable) filter in the given memory <paramref name="repo"/>
        /// </summary>
        /// <param name="repo">The repository to store the temporary object in</param>
        /// <param name="notionalParent"></param>
        /// <param name="whereSql"></param>
        /// <param name="name"></param>
        /// <param name="description"></param>
        /// <param name="filterParametersIfAny"></param>
        public SpontaneouslyInventedFilter(MemoryCatalogueRepository repo, IContainer notionalParent, string whereSql, string name, string description, ISqlParameter[] filterParametersIfAny)
        {
            _repo = repo;
            _filterParametersIfAny = filterParametersIfAny;
            WhereSQL    = whereSql;
            Name        = name;
            Description = description;

            repo.InsertAndHydrate(this, new Dictionary <string, object>());

            if (notionalParent != null)
            {
                repo.AddChild(notionalParent, this);
                FilterContainer_ID = notionalParent.ID;
            }
        }