mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-06-18 20:08:15 +08:00
- 优化 Oracle IN :ids 值传入 IList 时报错;
This commit is contained in:
@ -2,6 +2,7 @@
|
||||
using FreeSql.Internal.Model;
|
||||
using Oracle.ManagedDataAccess.Client;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Data.Common;
|
||||
using System.Globalization;
|
||||
@ -69,7 +70,32 @@ namespace FreeSql.Oracle
|
||||
}
|
||||
var ret = new OracleParameter { ParameterName = $":{name}" };
|
||||
if (dbtype != null) ret.OracleDbType = dbtype.Value;
|
||||
ret.Value = value;
|
||||
if (value is IList valueList && value is Array == false && valueList.Count > 0)
|
||||
{
|
||||
var valueItemType = valueList[0]?.GetType();
|
||||
if (valueItemType == typeof(int)) LocalSetListValue<int>();
|
||||
else if (valueItemType == typeof(long)) LocalSetListValue<long>();
|
||||
else if (valueItemType == typeof(short)) LocalSetListValue<short>();
|
||||
else if (valueItemType == typeof(string)) LocalSetListValue<string>();
|
||||
else if(valueItemType == typeof(Guid)) LocalSetListValue<Guid>();
|
||||
else if (valueItemType == typeof(char)) LocalSetListValue<char>();
|
||||
else if (valueItemType == typeof(bool)) LocalSetListValue<bool>();
|
||||
else if (valueItemType == typeof(uint)) LocalSetListValue<uint>();
|
||||
else if (valueItemType == typeof(ulong)) LocalSetListValue<ulong>();
|
||||
else if (valueItemType == typeof(ushort)) LocalSetListValue<ushort>();
|
||||
else if (valueItemType == typeof(decimal)) LocalSetListValue<decimal>();
|
||||
else if (valueItemType == typeof(double)) LocalSetListValue<double>();
|
||||
else if (valueItemType == typeof(float)) LocalSetListValue<float>();
|
||||
else if (valueItemType == typeof(DateTime)) LocalSetListValue<DateTime>();
|
||||
|
||||
void LocalSetListValue<T>()
|
||||
{
|
||||
var valueCopy = new List<T>();
|
||||
foreach (var valueItem in valueList) valueCopy.Add((T)Utils.GetDataReaderValue(valueItemType, valueItem));
|
||||
value = valueCopy.ToArray();
|
||||
}
|
||||
}
|
||||
ret.Value = value; //IList 赋值会报错
|
||||
return ret;
|
||||
});
|
||||
|
||||
|
Reference in New Issue
Block a user