/// <summary> /// 根据类型<see cref="DbJoinKeyPairExpression"/>表达式创建表达式语句片段。 /// </summary> /// <param name="context">生成上下文。</param> /// <param name="expression">所在数据源。</param> /// <param name="source">检索表达式。</param> /// <returns>创建结果。</returns> protected virtual IExpressionFragment CreateExpressionForJoinKeyPair(GenerateContext context, DbExpression expression, ISourceFragment source) { var content = (DbJoinKeyPairExpression)expression; return(new BinaryFragment(context, EBinaryKind.Equal) { Left = source.CreateExpression(content.Left), Right = source.CreateExpression(content.Right), }); }
/// <inheritdoc/> protected override IExpressionFragment CreateExpressionForBinary(GenerateContext context, DbExpression expression, ISourceFragment source) { var binary = (DbBinaryExpression)expression; if (binary.Kind == EBinaryKind.Add && binary.ClrType == typeof(string)) { return(new StringConcatFragment(context, source.CreateExpression(binary.Left), source.CreateExpression(binary.Right))); } return(base.CreateExpressionForBinary(context, expression, source)); }
/// <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="DbBinaryExpression"/>表达式创建表达式语句片段。 /// </summary> /// <param name="context">生成上下文。</param> /// <param name="expression">所在数据源。</param> /// <param name="source">检索表达式。</param> /// <returns>创建结果。</returns> protected virtual IExpressionFragment CreateExpressionForBinary(GenerateContext context, DbExpression expression, ISourceFragment source) { var binary = (DbBinaryExpression)expression; if (binary.Kind == EBinaryKind.AndAlso || binary.Kind == EBinaryKind.OrElse) { return(source.CreateExpression(binary.Left).Merge(binary.Kind, source.CreateExpression(binary.Right))); } else { return(new BinaryFragment(context, binary.Kind) { Left = source.CreateExpression(binary.Left), Right = source.CreateExpression(binary.Right) }); } }
/// <summary> /// 根据类型<see cref="DbUnaryExpression"/>表达式创建表达式语句片段。 /// </summary> /// <param name="context">生成上下文。</param> /// <param name="expression">所在数据源。</param> /// <param name="source">检索表达式。</param> /// <returns>创建结果。</returns> protected virtual IExpressionFragment CreateExpressionForUnary(GenerateContext context, DbExpression expression, ISourceFragment source) { var unary = (DbUnaryExpression)expression; return(new UnaryFragment(context, unary.Kind, unary.Type) { Expresssion = source.CreateExpression(unary.Expression) }); }
/// <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); }