Example #1
0
        /// <inheritdoc/>
        protected override IExpressionFragment CreateExpressionForBinary(GenerateContext context, DbExpression expression, ISourceFragment source)
        {
            var binary = (DbBinaryExpression)expression;

            if (binary.Kind == EBinaryKind.Add && binary.ClrType == typeof(string))
            {
                var scalar = new ScalarFragment(context,
                                                source.CreateExpression(binary.Left),
                                                source.CreateExpression(binary.Right));
                scalar.Function = SupportMembers.String.Concat;
                return(scalar);
            }
            return(base.CreateExpressionForBinary(context, expression, source));
        }
        /// <summary>
        /// 根据类型<see cref="DbScalarFunctionExpression"/>表达式创建表达式语句片段。
        /// </summary>
        /// <param name="context">生成上下文。</param>
        /// <param name="expression">所在数据源。</param>
        /// <param name="source">检索表达式。</param>
        /// <returns>创建结果。</returns>
        protected virtual IExpressionFragment CreateExpressionForScalarFunction(GenerateContext context, DbExpression expression, ISourceFragment source)
        {
            var scalar = (DbScalarFunctionExpression)expression;
            var result = new ScalarFragment(context)
            {
                Function = scalar.Function
            };

            foreach (var arg in scalar.Arguments)
            {
                result.Arguments.Add(source.CreateExpression(arg));
            }
            return(result);
        }