public ILeftHandSide Where(params Expression <Func <TCollection, bool> >[] conditions) { foreach (var condition in conditions) { var rewriter = new ConditionRewriter(_patternBuilder.Declaration, _patternBuilder.Declarations); var rewrittenCondition = rewriter.Rewrite(condition); _patternBuilder.Condition(rewrittenCondition); } return(Builder); }
private ILeftHandSide Match <T>(ParameterExpression symbol, IEnumerable <Expression <Func <T, bool> > > conditions) { var groupBuilder = _groupBuilders.Current; var patternBuilder = groupBuilder.Pattern(symbol.Type, symbol.Name); foreach (var condition in conditions) { var rewriter = new ConditionRewriter(patternBuilder.Declaration, groupBuilder.Declarations); var rewrittenCondition = rewriter.Rewrite(condition); patternBuilder.Condition(rewrittenCondition); } return(this); }
public ILeftHandSide Not <T>(params Expression <Func <T, bool> >[] conditions) { var groupBuilder = _groupBuilders.Current; var notBuilder = groupBuilder.Not(); var patternBuilder = notBuilder.Pattern(typeof(T)); foreach (var condition in conditions) { var rewriter = new ConditionRewriter(patternBuilder.Declaration, groupBuilder.Declarations); var rewrittenCondition = rewriter.Rewrite(condition); patternBuilder.Condition(rewrittenCondition); } return(this); }
public ILeftHandSide Not <T>(params Expression <Func <T, bool> >[] conditions) { var leftHandSide = _builder.LeftHandSide(); var notBuilder = leftHandSide.Group(GroupType.Not); var patternBuilder = notBuilder.Pattern(typeof(T)); foreach (var condition in conditions) { var rewriter = new ConditionRewriter(leftHandSide.Declarations); var rewrittenCondition = rewriter.Rewrite(patternBuilder.Declaration, condition); patternBuilder.Condition(rewrittenCondition); } return(this); }
public ICollectPattern <IEnumerable <T> > Collect <T>(Expression <Func <IEnumerable <T> > > alias, params Expression <Func <T, bool> >[] itemConditions) { var collectionSymbol = ExtractSymbol(alias); var groupBuilder = _groupBuilders.Current; var outerPatternBuilder = groupBuilder.Pattern(collectionSymbol.Type, collectionSymbol.Name); var aggregateBuilder = outerPatternBuilder.Aggregate(); aggregateBuilder.CollectionOf(typeof(T)); var patternBuilder = aggregateBuilder.Pattern(typeof(T)); foreach (var condition in itemConditions) { var rewriter = new ConditionRewriter(patternBuilder.Declaration, groupBuilder.Declarations); var rewrittenCondition = rewriter.Rewrite(condition); patternBuilder.Condition(rewrittenCondition); } return(new CollectExpressionBuilder <IEnumerable <T> >(this, outerPatternBuilder)); }
private ILeftHandSide ForAll <T>(Expression <Func <T, bool> > baseCondition, IEnumerable <Expression <Func <T, bool> > > conditions) { var leftHandSide = _builder.LeftHandSide(); var forallBuilder = leftHandSide.ForAll(); var basePatternBuilder = forallBuilder.BasePattern(typeof(T)); { var rewriter = new ConditionRewriter(basePatternBuilder.Declaration, leftHandSide.Declarations); var rewrittenCondition = rewriter.Rewrite(baseCondition); basePatternBuilder.Condition(rewrittenCondition); } var patternBuilder = forallBuilder.Pattern(typeof(T)); foreach (var condition in conditions) { var rewriter = new ConditionRewriter(patternBuilder.Declaration, leftHandSide.Declarations); var rewrittenCondition = rewriter.Rewrite(condition); patternBuilder.Condition(rewrittenCondition); } return(this); }
public ILeftHandSide Collect <T>(Expression <Func <IEnumerable <T> > > alias, params Expression <Func <T, bool> >[] itemConditions) { var collectionSymbol = ExtractSymbol(alias); var leftHandSide = _builder.LeftHandSide(); var outerPatternBuilder = leftHandSide.Pattern(collectionSymbol.Type, collectionSymbol.Name); var aggregateBuilder = outerPatternBuilder.SourceAggregate(); aggregateBuilder.CollectionOf(typeof(T)); var patternBuilder = aggregateBuilder.SourcePattern(typeof(T)); foreach (var condition in itemConditions) { var rewriter = new ConditionRewriter(leftHandSide.Declarations); var rewrittenCondition = rewriter.Rewrite(patternBuilder.Declaration, condition); patternBuilder.Condition(rewrittenCondition); } return(this); }