/// <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); }