diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs index c109e1e2..bb0e122e 100644 --- a/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs +++ b/FreeSql.Tests/FreeSql.Tests/UnitTest3.cs @@ -110,6 +110,9 @@ namespace FreeSql.Tests var slslsl = g.oracle.Select().ToList(); + var slsls1Ids = slslsl.Select(a => a.ID).ToArray(); + var slslss2 = g.oracle.Select().Where(a => slsls1Ids.Contains(a.ID)).ToList(); + var mt_codeId = Guid.Parse("2f48c5ca-7257-43c8-9ee2-0e16fa990253"); Assert.Equal(1, g.oracle.Insert(new SendInfo { ID = mt_codeId, Code = "mt_code", Binary = Encoding.UTF8.GetBytes("我是mt_code") }) .ExecuteAffrows()); diff --git a/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessAdo.cs b/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessAdo.cs index 68d6022c..f6f8844b 100644 --- a/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessAdo.cs +++ b/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessAdo.cs @@ -37,7 +37,7 @@ namespace FreeSql.MsAccess public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) { if (param == null) return "NULL"; - if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList())) + if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) param = Utils.GetDataReaderValue(mapType, param); if (param is bool || param is bool?) diff --git a/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs b/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs index 57751c7e..e95438d1 100644 --- a/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs +++ b/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs @@ -36,7 +36,7 @@ namespace FreeSql.MySql public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) { if (param == null) return "NULL"; - if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList())) + if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) param = Utils.GetDataReaderValue(mapType, param); if (param is bool || param is bool?) diff --git a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengAdo.cs b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengAdo.cs index 1bb529b0..34c3529c 100644 --- a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengAdo.cs @@ -35,7 +35,7 @@ namespace FreeSql.Odbc.Dameng public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) { if (param == null) return "NULL"; - if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList())) + if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) param = Utils.GetDataReaderValue(mapType, param); if (param is byte[]) diff --git a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengExpression.cs b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengExpression.cs index 8a26b08c..03468326 100644 --- a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengExpression.cs @@ -41,7 +41,9 @@ namespace FreeSql.Odbc.Dameng case "System.UInt16": case "System.UInt32": case "System.UInt64": return $"cast({getExp(operandExp)} as number)"; - case "System.Guid": return $"to_char({getExp(operandExp)})"; + case "System.Guid": + if (tsc.mapType == typeof(byte[])) return $"hextoraw({getExp(operandExp)})"; + return $"to_char({getExp(operandExp)})"; } } break; @@ -68,7 +70,9 @@ namespace FreeSql.Odbc.Dameng case "System.UInt16": case "System.UInt32": case "System.UInt64": return $"cast({getExp(callExp.Arguments[0])} as number)"; - case "System.Guid": return $"substr(to_char({getExp(callExp.Arguments[0])}), 1, 36)"; + case "System.Guid": + if (tsc.mapType == typeof(byte[])) return $"hextoraw({getExp(callExp.Arguments[0])})"; + return $"to_char({getExp(callExp.Arguments[0])})"; } return null; case "NewGuid": diff --git a/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcAdo.cs b/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcAdo.cs index c5df3ef0..32b028f7 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcAdo.cs @@ -37,7 +37,7 @@ namespace FreeSql.Odbc.Default public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) { if (param == null) return "NULL"; - if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList())) + if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) param = Utils.GetDataReaderValue(mapType, param); if (param is bool || param is bool?) diff --git a/Providers/FreeSql.Provider.Odbc/GBase/OdbcGBaseAdo/__OdbcGBaseAdo.cs b/Providers/FreeSql.Provider.Odbc/GBase/OdbcGBaseAdo/__OdbcGBaseAdo.cs index 7e627c7b..96a01d0e 100644 --- a/Providers/FreeSql.Provider.Odbc/GBase/OdbcGBaseAdo/__OdbcGBaseAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/GBase/OdbcGBaseAdo/__OdbcGBaseAdo.cs @@ -37,7 +37,7 @@ namespace FreeSql.Odbc.GBase public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) { if (param == null) return "NULL"; - if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList())) + if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) param = Utils.GetDataReaderValue(mapType, param); if (param is bool || param is bool?) return (bool)param ? "'t'" : "'f'"; diff --git a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs index 49fb8d61..d9738cc6 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs @@ -36,7 +36,7 @@ namespace FreeSql.Odbc.MySql public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) { if (param == null) return "NULL"; - if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList())) + if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) param = Utils.GetDataReaderValue(mapType, param); if (param is bool || param is bool?) diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs index b7d9c10b..fabfcddd 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs @@ -35,7 +35,7 @@ namespace FreeSql.Odbc.Oracle public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) { if (param == null) return "NULL"; - if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList())) + if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) param = Utils.GetDataReaderValue(mapType, param); if (param is byte[]) diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs index a31f14d9..d55cd439 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleExpression.cs @@ -41,7 +41,9 @@ namespace FreeSql.Odbc.Oracle case "System.UInt16": case "System.UInt32": case "System.UInt64": return $"cast({getExp(operandExp)} as number)"; - case "System.Guid": return $"to_char({getExp(operandExp)})"; + case "System.Guid": + if (tsc.mapType == typeof(byte[])) return $"hextoraw({getExp(operandExp)})"; + return $"to_char({getExp(operandExp)})"; } } break; @@ -68,7 +70,9 @@ namespace FreeSql.Odbc.Oracle case "System.UInt16": case "System.UInt32": case "System.UInt64": return $"cast({getExp(callExp.Arguments[0])} as number)"; - case "System.Guid": return $"substr(to_char({getExp(callExp.Arguments[0])}), 1, 36)"; + case "System.Guid": + if (tsc.mapType == typeof(byte[])) return $"hextoraw({getExp(callExp.Arguments[0])})"; + return $"to_char({getExp(callExp.Arguments[0])})"; } return null; case "NewGuid": diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs index 0d3b0526..c0ac2ae6 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs @@ -37,7 +37,7 @@ namespace FreeSql.Odbc.PostgreSQL public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) { if (param == null) return "NULL"; - if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList())) + if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) param = Utils.GetDataReaderValue(mapType, param); if (param is bool || param is bool?) diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs index 20c58366..d97d5fc1 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs @@ -38,7 +38,7 @@ namespace FreeSql.Odbc.SqlServer public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) { if (param == null) return "NULL"; - if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList())) + if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) param = Utils.GetDataReaderValue(mapType, param); if (param is bool || param is bool?) diff --git a/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs b/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs index 67ac84db..ba81e59c 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs @@ -35,7 +35,7 @@ namespace FreeSql.Oracle public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) { if (param == null) return "NULL"; - if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList())) + if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) param = Utils.GetDataReaderValue(mapType, param); if (param is byte[]) diff --git a/Providers/FreeSql.Provider.Oracle/OracleExpression.cs b/Providers/FreeSql.Provider.Oracle/OracleExpression.cs index 79682275..fc0d0885 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleExpression.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleExpression.cs @@ -41,7 +41,9 @@ namespace FreeSql.Oracle case "System.UInt16": case "System.UInt32": case "System.UInt64": return $"cast({getExp(operandExp)} as number)"; - case "System.Guid": return $"substr(to_char({getExp(operandExp)}), 1, 36)"; + case "System.Guid": + if (tsc.mapType == typeof(byte[])) return $"hextoraw({getExp(operandExp)})"; + return $"to_char({getExp(operandExp)})"; } } break; @@ -68,7 +70,9 @@ namespace FreeSql.Oracle case "System.UInt16": case "System.UInt32": case "System.UInt64": return $"cast({getExp(callExp.Arguments[0])} as number)"; - case "System.Guid": return $"to_char({getExp(callExp.Arguments[0])})"; + case "System.Guid": + if (tsc.mapType == typeof(byte[])) return $"hextoraw({getExp(callExp.Arguments[0])})"; + return $"to_char({getExp(callExp.Arguments[0])})"; } return null; case "NewGuid": diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs index 8f7e2a36..d843b497 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs @@ -38,7 +38,7 @@ namespace FreeSql.PostgreSQL public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) { if (param == null) return "NULL"; - if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList() || param is JToken || param is JObject || param is JArray)) + if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || param is JToken || param is JObject || param is JArray)) param = Utils.GetDataReaderValue(mapType, param); bool isdic; diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs index 5b247b31..5ca513c1 100644 --- a/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs +++ b/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs @@ -39,7 +39,7 @@ namespace FreeSql.SqlServer public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) { if (param == null) return "NULL"; - if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList())) + if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) param = Utils.GetDataReaderValue(mapType, param); if (param is bool || param is bool?) diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs b/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs index 213c1db5..4e473739 100644 --- a/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs +++ b/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs @@ -34,7 +34,7 @@ namespace FreeSql.Sqlite public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) { if (param == null) return "NULL"; - if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false || mapType.IsArrayOrList())) + if (mapType != null && mapType != param.GetType() && (param is IEnumerable == false)) param = Utils.GetDataReaderValue(mapType, param); if (param is bool || param is bool?)