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); }