public virtual Expression <Func <TResult, bool> > Build()
        {
            var ruleExpression = RuleParser.GetQueryExpression <TResult, RuleContext>(Conditions);

            var predicate = ruleExpression ?? PredicateBuilder.True <TResult>();

            if (ValidTemplates.Any())
            {
                var orPredicate = PredicateBuilder.True <TResult>();
                orPredicate = ValidTemplates.Aggregate(orPredicate, (current, templateId) => current.Or(item => item.TemplateId == templateId));

                predicate = predicate.And(orPredicate);
            }

            predicate = ExcludedItems.Aggregate(predicate, (current, excludedId) => current.And(item => item.ItemId != excludedId));

            if (!string.IsNullOrEmpty(Location))
            {
                predicate = predicate.And(item => item.Path.StartsWith(Location));
            }

            return(predicate);
        }