protected override ISqlBuilder Join(MemberExpression expression, ISqlBuilder sqlBuilder) { var tableAlias = GetTableAlias(expression, sqlBuilder); sqlBuilder.AppendJoinSql($"{tableAlias}{sqlBuilder.Formate(expression.Member.Name)} "); return(sqlBuilder); }
protected override ISqlBuilder Join(ConstantExpression expression, ISqlBuilder sqlBuilder) { var sqlParamName = sqlBuilder.SetSqlParameter(expression.Value); sqlBuilder.AppendJoinSql($"{sqlParamName} "); return(sqlBuilder); }
protected override ISqlBuilder Join(BinaryExpression expression, ISqlBuilder sqlBuilder) { var expressionLeft = expression.Left; var expressionRight = expression.Right; if (expressionLeft is MemberExpression) { var memberExp = expressionLeft as MemberExpression; if (!MemberIsDataColumn(memberExp, sqlBuilder)) { throw new NotImplementedException($"{memberExp.Member.Name} is not data column"); } } if (expressionRight is MemberExpression) { var memberExp = expressionRight as MemberExpression; if (!MemberIsDataColumn(memberExp, sqlBuilder)) { throw new NotImplementedException($"{memberExp.Member.Name} is not data column"); } } var isRightHandle = false; if (IsNeedsParentheses(expression, expressionLeft)) { sqlBuilder.AppendJoinSql("( "); } if (expressionLeft is MemberExpression && expressionLeft.Type == typeof(bool) && expressionLeft.NodeType == ExpressionType.MemberAccess && (expression.NodeType == ExpressionType.AndAlso || expressionRight is ConstantExpression)) { SqlVistorProvider.Join(expressionLeft, sqlBuilder); sqlBuilder.AppendJoinSql($"{OperatorParser(ExpressionType.Equal)}"); var sqlParamName = string.Empty; if (expressionRight is ConstantExpression) { isRightHandle = true; var value = Convert.ToBoolean(((ConstantExpression)expressionRight).Value) ? 1 : 0; sqlParamName = sqlBuilder.SetSqlParameter(value); } else { sqlParamName = sqlBuilder.SetSqlParameter(1); } sqlBuilder.AppendJoinSql($"{sqlParamName} "); } else { SqlVistorProvider.Join(expression.Left, sqlBuilder); } if (IsNeedsParentheses(expression, expressionLeft)) { sqlBuilder.AppendJoinSql(") "); } if (!isRightHandle) { var whereOperator = string.Empty; if ((expressionRight is ConstantExpression) && ((ConstantExpression)expressionRight).Value == null) { whereOperator = OperatorParser(expression.NodeType, true); } else { whereOperator = OperatorParser(expression.NodeType); } sqlBuilder.AppendJoinSql($"{whereOperator}"); if (IsNeedsParentheses(expression, expressionRight)) { sqlBuilder.AppendJoinSql("( "); } if (expressionRight is MemberExpression && expressionRight.Type == typeof(bool) && expressionRight.NodeType == ExpressionType.MemberAccess && expression.NodeType == ExpressionType.AndAlso) { //(m=>m.IsAdmin) SqlVistorProvider.Join(expressionRight, sqlBuilder); sqlBuilder.AppendJoinSql($"{OperatorParser(ExpressionType.Equal)}"); var sqlParamName = sqlBuilder.SetSqlParameter(1); sqlBuilder.AppendJoinSql($"{sqlParamName} "); } else if (expressionRight is MemberExpression && IsNodeTypeSetValue(expression.NodeType)) { var memberExp = expressionRight as MemberExpression; var value = TryGetExpreesionValue(memberExp); if (value != null) { var sqlParamName = sqlBuilder.SetSqlParameter(value); sqlBuilder.AppendWhereSql($"{sqlParamName} "); } else { SqlVistorProvider.Join(expression.Right, sqlBuilder); } } else { SqlVistorProvider.Join(expression.Right, sqlBuilder); } if (IsNeedsParentheses(expression, expressionRight)) { sqlBuilder.AppendWhereSql(") "); } } return(sqlBuilder); }