/// <summary>
        /// Projects each product of a sequence into a new form.
        /// </summary>
        public static IQueryable <PageItem> Select(this IQueryable <PortalPage> query, PageField fields)
        {
            Expression <Func <PortalPage, PageItem> > selector = page => new PageItem
            {
                Id           = page.Id,
                Uri          = page.Uri,
                ModifiedDate = page.ModifiedDate,
                Name         = page.Name,
                Description  = page.Description
            };

            if (fields.HasFlag(PageField.Portal))
            {
                selector = selector.Merge(page => new PageItem
                {
                    Portal = new ResourceItem
                    {
                        Id   = page.Portal.Id,
                        Uri  = page.Portal.Uri,
                        Name = page.Portal.Name
                    }
                });
            }

            if (fields.HasFlag(PageField.Master))
            {
                selector = selector.Merge(page => new PageItem
                {
                    Master = page.Master == null ? null : new ResourceItem
                    {
                        Id   = page.Master.Id,
                        Uri  = PortalFunctions.GetPageUriById(page.Master.Id),
                        Name = page.Master.Name
                    }
                });
            }

            if (fields.HasFlag(PageField.Content))
            {
                selector = selector.Merge(page => new PageItem
                {
                    HtmlContent  = page.HtmlContent,
                    StyleContent = page.StyleContent
                });
            }

            return(query.Select(selector));
        }