Exemple #1
0
/// <summary>
/// Remove a subquery from its parent and optionally any associated views
/// </summary>
/// <param name="sq"></param>
/// <param name="removeResultsViews"></param>
/// <param name="removeResultsPagesIfEmpty"></param>

        public static void RemoveSubQuery(
            Query sq,
            bool removeResultsViews,
            bool removeResultsPagesIfEmpty)
        {
            if (sq == null)
            {
                throw new Exception("Null subquery");
            }
            Query pq = sq.Parent;

            if (pq == null || !pq.Subqueries.Contains(sq))
            {
                throw new Exception("Subquery not contained in query");
            }
            sq.Parent = null;

            pq.Subqueries.Remove(sq);             // remove subquery from query

            if (!removeResultsViews)
            {
                return;
            }

            ResultsPages rPages = pq.ResultsPages;             // overall results pages

            sq.ResultsPages = null;

            List <ResultsViewProps> rViews = sq.GetResultsViews();

            if (rViews != null)             // any views for subquery?
            {
                for (int vi = 0; vi < rViews.Count; vi++)
                {                 // remove any views from overall query ResultsPages
                    ResultsViewProps rv = rViews[vi];
                    if (rv == null || rv.ResultsPage == null)
                    {
                        continue;
                    }
                    ResultsPage rp = rv.ResultsPage;
                    if (rp == null || !rp.Views.Contains(rv))
                    {
                        continue;
                    }
                    rp.Views.Remove(rv);

                    if (removeResultsPagesIfEmpty && rp.Views.Count == 0 &&                     // remove page if empty & requested
                        rPages != null && rPages.Pages != null && rPages.Pages.Contains(rp))
                    {
                        rPages.Remove(rp);
                    }
                }
            }
        }