Beispiel #1
0
        public static Func <IDataContext, object> ConvertParameter(IBindingBuilder builder, Func <LambdaExpression> expression)
        {
            var hasClosure = expression.HasClosure();

            if (hasClosure || builder.Contains(BindingBuilderConstants.NoCache))
            {
                var e = expression();
                if (hasClosure)
                {
                    e.TraceClosureWarn();
                }
                var converter = new LambdaExpressionToBindingExpressionConverter(e);
                return(ConvertParameterInternal(builder, converter.ConvertParamterInternal(e)));
            }
            ParameterCacheValue value;

            lock (CacheParameter)
            {
                if (!CacheParameter.TryGetValue(expression, out value))
                {
                    var e         = expression();
                    var converter = new LambdaExpressionToBindingExpressionConverter(e);
                    value = converter.ConvertParamterInternal(e);
                    CacheParameter[expression] = value;
                }
            }
            return(ConvertParameterInternal(builder, value));
        }