コード例 #1
0
        public PatchRequest CreatePatchRequest <TDocument>(PropertyUpdateDescriptor[] propertyUpdates, Expression <Func <TDocument, bool> > condition)
        {
            var parameters   = new ScriptParameterDictionary();
            var patchRequest = new PatchRequest
            {
                Values = parameters,
                Script = _patchScriptBuilder.CreateConditionalPatchScript(propertyUpdates, condition, parameters)
            };

            return(patchRequest);
        }
コード例 #2
0
        public string CreateScriptBody(PropertyUpdateDescriptor[] propertyUpdates, ScriptParameterDictionary parameters)
        {
            var assignmentScripts = new List <string>(propertyUpdates.Length);

            foreach (var propertyUpdate in propertyUpdates)
            {
                var transformedMemberSelector = GetNormalizedExpression(propertyUpdate.MemberSelector);

                var assignmentExpression = Expression.Assign(
                    transformedMemberSelector,
                    Expression.Constant(propertyUpdate.NewValue));

                assignmentScripts.Add(_expressionProcessorPipeline.ProcessExpression(assignmentExpression, parameters));
            }

            return(string.Join(
                       "\n",
                       assignmentScripts.Select(script => $"\t{script};")));
        }
コード例 #3
0
        public string CreateScriptCondition <TDocument>(Expression <Func <TDocument, bool> > condition, ScriptParameterDictionary parameters)
        {
            if (condition == null)
            {
                throw new ArgumentNullException(nameof(condition));
            }

            if (parameters == null)
            {
                throw new ArgumentNullException(nameof(parameters));
            }

            var normalizedConditionBody = GetNormalizedConditionBody(condition);

            return(_expressionProcessorPipeline.ProcessExpression(normalizedConditionBody, parameters));
        }
コード例 #4
0
        public string CreateConditionalPatchScript <TDocument>(PropertyUpdateDescriptor[] propertyUpdates, Expression <Func <TDocument, bool> > condition, ScriptParameterDictionary parameters)
        {
            var scriptCondition = _patchScriptConditionBuilder.CreateScriptCondition(condition, parameters);
            var scriptBody      = _patchScriptBodyBuilder.CreateScriptBody(propertyUpdates, parameters);

            return(string.Join(
                       "\n",
                       $"if ({scriptCondition}) {{",
                       scriptBody,
                       "}"));
        }