/// <summary> /// 解析查询列中的字符串截取函数 /// </summary> /// <param name="callExp"></param> /// <param name="sqlBuilder"></param> /// <param name="fullExpression"></param> /// <param name="alias"></param> private void ResolveSelectForSubstring(MethodCallExpression callExp, StringBuilder sqlBuilder, LambdaExpression fullExpression, string alias) { if (callExp.Object is MemberExpression objExp && objExp.Expression.NodeType == ExpressionType.Parameter) { var funcName = _sqlAdapter.FuncSubstring; var colName = _queryBody.GetColumnName(objExp, fullExpression); var start = CommonExtensions.ToInt(((ConstantExpression)callExp.Arguments[0]).Value) + 1; if (callExp.Arguments.Count > 1) { var length = CommonExtensions.ToInt(((ConstantExpression)callExp.Arguments[1]).Value); sqlBuilder.AppendFormat("{0}({1},{2},{3}) AS {4},", funcName, colName, start, length, alias); } else { if (_sqlAdapter.SqlDialect == SqlDialect.SqlServer) { sqlBuilder.AppendFormat("{0}({1},{2},{3}) AS {4},", funcName, colName, start, $"LEN({colName})-{start - 1}", alias); } else { sqlBuilder.AppendFormat("{0}({1},{2}) AS {3},", funcName, colName, start, alias); } } } }
/// <summary> /// 附加值 /// </summary> /// <param name="sqlBuilder"></param> /// <param name="type"></param> /// <param name="value"></param> private void AppendValue(StringBuilder sqlBuilder, Type type, object value) { if (type.IsEnum || type == typeof(bool)) { sqlBuilder.AppendFormat("{0}", CommonExtensions.ToInt(value)); } else if (type == typeof(string) || type == typeof(char) || type == typeof(Guid)) { sqlBuilder.AppendFormat("'{0}'", value); } else if (type == typeof(DateTime)) { sqlBuilder.AppendFormat("'{0:yyyy-MM-dd HH:mm:ss}'", CommonExtensions.ToDateTime(value)); } else { sqlBuilder.AppendFormat("{0}", value); } }