Esempio n. 1
0
            public override Expression ApplyPolicy(Expression expression, MemberInfo member)
            {
                if (this.policy.operations.TryGetValue(member, out List <LambdaExpression> ops))
                {
                    var result = expression;

                    foreach (var fnOp in ops)
                    {
                        var pop = ExpressionEvaluator.Eval(fnOp, this.Translator.Mapper.Mapping.CanBeEvaluatedLocally);

                        result = this.Translator.Mapper.ApplyMapping(Expression.Invoke(pop, result));
                    }

                    var projection = result as DbProjectionExpression;

                    if (projection.Type != expression.Type)
                    {
                        var fnAgg = DbAggregator.GetAggregator(expression.Type, projection.Type);

                        projection = new DbProjectionExpression(projection.Select, projection.Projector, fnAgg);
                    }

                    return(projection);
                }

                return(expression);
            }