mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 01:05:27 +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