private void AddParam <TEntity>(PropertyInfo property, TEntity tmodelObj) where TEntity : class { var paramName = "@P_" + GetDBColumnFromProperty(property); var sqlType = ClrTypeToSqlDbTypeMapper.GetSqlDbTypeFromClrType(property.PropertyType); var param = new SqlParameter(paramName, sqlType) { Value = property.GetValue(tmodelObj).ToString() }; Parameters.Add(param); }
private static CustomSqlWriteExpressionResult?WriteWithParameter(TextWriter writer, Expression expression, AtkExpSqlType atkSql, string leftBracket, string rightBracket) { expression = AtkPartialEvaluator.Eval(expression); PartialSelectSelectParameterDefinition leftConstantParameterDefinition = null; PartialSelectSelectParameterDefinition rightConstantParameterDefinition = null; var expressionOperator = string.Empty; var expressionWriterSql = new AtkExpressionWriterSql <T>(writer) { _leftBracket = leftBracket, _rightBracket = rightBracket, atkRead = atkSql }; expressionWriterSql.Visit(expression); if (expression is LambdaExpression lambda) { var body = lambda.Body as BinaryExpression; expressionOperator = new AtkExpressionWriterSql <T>(writer).GetOperator(lambda.Body.NodeType); if (body != null && body.Left.NodeType == ExpressionType.Constant) { if (body.Left is ConstantExpression b) { leftConstantParameterDefinition = new PartialSelectSelectParameterDefinition { DbType = ClrTypeToSqlDbTypeMapper.GetSqlDbTypeFromClrType(body.Left.Type), Direction = ParameterDirection.Input, IsNullable = body.Left.Type.IsNullable(), Value = Convert.ChangeType(b.Value, body.Left.Type) } } ; } if (body != null && body.Right.NodeType == ExpressionType.Constant) { if (body.Right is ConstantExpression b) { rightConstantParameterDefinition = new PartialSelectSelectParameterDefinition { DbType = ClrTypeToSqlDbTypeMapper.GetSqlDbTypeFromClrType(body.Right.Type), Direction = ParameterDirection.Input, IsNullable = body.Right.Type.IsNullable(), Value = Convert.ChangeType(b.Value, Nullable.GetUnderlyingType(body.Right.Type) ?? body.Right.Type) } } } ; } switch (atkSql) { case AtkExpSqlType.AtkWhere: return(new CustomSqlWriteExpressionResult( Regex.Replace(expressionWriterSql.atkWhereResult, "and\\s?$", ""), expressionOperator, leftConstantParameterDefinition, rightConstantParameterDefinition )); case AtkExpSqlType.AtkOrder: return(null); //Regex.Replace(expressionWriterSql.atkOrderResult, ",\\s?$", ""); default: return(null); } }