private static Expression <Func <ZipPair <int, TSourceItem>, bool> > getZipPairPredicateExpression(Expression <Func <TSourceItem, bool> > predicateExpression)
        {
            ParameterExpression zipPairParameterExpression
                = Expression.Parameter(typeof(ZipPair <int, TSourceItem>), "zipPair");
            Expression zipPairItem2Expression
                = Expression.PropertyOrField(
                      zipPairParameterExpression,
                      nameof(ZipPair <int, TSourceItem> .RightItem));
            ReplaceParameterVisitor replaceParameterVisitor
                = new ReplaceParameterVisitor(
                      predicateExpression.Parameters[0],
                      zipPairItem2Expression);
            Expression <Func <ZipPair <int, TSourceItem>, bool> > zipPairPredicateExpression
                = Expression.Lambda <Func <ZipPair <int, TSourceItem>, bool> >(
                      replaceParameterVisitor.Visit(predicateExpression.Body),
                      zipPairParameterExpression);

            return(zipPairPredicateExpression);
        }
Esempio n. 2
0
        private static Expression <Func <ZipPair <int, TSourceItem>, bool> > getZipPairNotPredicateExpression(Expression <Func <TSourceItem, int, bool> > predicateExpression)
        {
            ParameterExpression zipPairParameterExpression
                = Expression.Parameter(typeof(ZipPair <int, TSourceItem>), "zipPair");
            Expression zipPairIndexExpression
                = Expression.PropertyOrField(
                      zipPairParameterExpression,
                      nameof(ZipPair <int, TSourceItem> .LeftItem));
            Expression zipPairItemExpression
                = Expression.PropertyOrField(
                      zipPairParameterExpression,
                      nameof(ZipPair <int, TSourceItem> .RightItem));
            ReplaceParameterVisitor replaceParameterVisitor
                = new ReplaceParameterVisitor(
                      predicateExpression.Parameters,
                      new[] { zipPairItemExpression, zipPairIndexExpression });
            Expression <Func <ZipPair <int, TSourceItem>, bool> > zipPairNotPredicateExpression
                = Expression.Lambda <Func <ZipPair <int, TSourceItem>, bool> >(
                      // ReSharper disable once AssignNullToNotNullAttribute
                      Expression.Not(replaceParameterVisitor.Visit(predicateExpression.Body)),
                      zipPairParameterExpression);

            return(zipPairNotPredicateExpression);
        }
        private static Expression <Func <ZipPair <int, TSourceItem>, INotifyCollectionChanged> > getZipPairSelectorExpression(Expression <Func <TSourceItem, int, INotifyCollectionChanged> > selectorExpression)
        {
            ParameterExpression zipPairParameterExpression
                = Expression.Parameter(typeof(ZipPair <int, TSourceItem>), "zipPair");
            Expression zipPairIndexExpression
                = Expression.PropertyOrField(
                      zipPairParameterExpression,
                      nameof(ZipPair <int, TSourceItem> .LeftItem));
            Expression zipPairItemExpression
                = Expression.PropertyOrField(
                      zipPairParameterExpression,
                      nameof(ZipPair <int, TSourceItem> .RightItem));
            ReplaceParameterVisitor replaceParameterVisitor
                = new ReplaceParameterVisitor(
                      selectorExpression.Parameters,
                      new[] { zipPairItemExpression, zipPairIndexExpression });
            Expression <Func <ZipPair <int, TSourceItem>, INotifyCollectionChanged> > zipPairSelectorExpression
                = Expression.Lambda <Func <ZipPair <int, TSourceItem>, INotifyCollectionChanged> >(
                      // ReSharper disable once AssignNullToNotNullAttribute
                      replaceParameterVisitor.Visit(selectorExpression.Body),
                      zipPairParameterExpression);

            return(zipPairSelectorExpression);
        }
Esempio n. 4
0
        private static Expression <Func <JoinPair <TOuterSourceItem, TInnerSourceItem>, bool> > getJoinPairPredicateExpression(Expression <Func <TOuterSourceItem, TInnerSourceItem, bool> > joinPredicateExpression)
        {
            ParameterExpression joinPairParameterExpression
                = Expression.Parameter(typeof(JoinPair <TOuterSourceItem, TInnerSourceItem>), "joinPair");
            Expression joinPairOuterItemExpression
                = Expression.PropertyOrField(
                      joinPairParameterExpression,
                      nameof(JoinPair <TOuterSourceItem, TInnerSourceItem> .OuterItem));
            Expression joinPairInnerItemExpression
                = Expression.PropertyOrField(
                      joinPairParameterExpression,
                      nameof(JoinPair <TOuterSourceItem, TInnerSourceItem> .InnerItem));
            ReplaceParameterVisitor replaceParameterVisitor
                = new ReplaceParameterVisitor(
                      joinPredicateExpression.Parameters,
                      new[] { joinPairOuterItemExpression, joinPairInnerItemExpression });
            Expression <Func <JoinPair <TOuterSourceItem, TInnerSourceItem>, bool> > joinPairPredicateExpression
                = Expression.Lambda <Func <JoinPair <TOuterSourceItem, TInnerSourceItem>, bool> >(
                      // ReSharper disable once AssignNullToNotNullAttribute
                      replaceParameterVisitor.Visit(joinPredicateExpression.Body),
                      joinPairParameterExpression);

            return(joinPairPredicateExpression);
        }