mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 09:15:27 +08:00 
			
		
		
		
	- 优化 集合导航属性表达式中忘记使用 AsSelect() 的友好错误提示;
This commit is contained in:
		@@ -550,7 +550,6 @@ namespace FreeSql.Tests
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            var gkjdjd = g.sqlite.Select<AuthorTest>().Where(a => a.Post.AsSelect().Count() > 0).ToList();
 | 
			
		||||
 | 
			
		||||
            var testrunsql1 =  g.mysql.Select<TaskBuild>().Where(a => a.OptionsEntity04 > DateTime.Now.AddDays(0).ToString("yyyyMMdd").TryTo<int>()).ToSql();
 | 
			
		||||
@@ -892,8 +891,6 @@ namespace FreeSql.Tests
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            var ttt1 = g.sqlite.Select<Model1>().Where(a => a.Childs.AsSelect().Any(b => b.Title == "111")).ToList();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -51,18 +51,15 @@ public static partial class FreeSqlGlobalExtensions
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// 获取 Type 的原始 c# 文本表示
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    /// <param name="that"></param>
 | 
			
		||||
    /// <param name="type"></param>
 | 
			
		||||
    /// <returns></returns>
 | 
			
		||||
    public static string DisplayCsharp(this Type that)
 | 
			
		||||
    internal static string DisplayCsharp(this Type type, bool isNameSpace = true)
 | 
			
		||||
    {
 | 
			
		||||
        return DisplayCsharp(that, true);
 | 
			
		||||
    }
 | 
			
		||||
    static string DisplayCsharp(this Type that, bool isNameSpace)
 | 
			
		||||
    {
 | 
			
		||||
        if (that == typeof(void)) return "void";
 | 
			
		||||
        if (that.IsGenericParameter) return that.Name;
 | 
			
		||||
        if (type == null) return null;
 | 
			
		||||
        if (type == typeof(void)) return "void";
 | 
			
		||||
        if (type.IsGenericParameter) return type.Name;
 | 
			
		||||
        var sb = new StringBuilder();
 | 
			
		||||
        var nestedType = that;
 | 
			
		||||
        var nestedType = type;
 | 
			
		||||
        while (nestedType.IsNested)
 | 
			
		||||
        {
 | 
			
		||||
            sb.Insert(0, ".").Insert(0, DisplayCsharp(nestedType.DeclaringType, false));
 | 
			
		||||
@@ -71,22 +68,22 @@ public static partial class FreeSqlGlobalExtensions
 | 
			
		||||
        if (isNameSpace && string.IsNullOrEmpty(nestedType.Namespace) == false)
 | 
			
		||||
            sb.Insert(0, ".").Insert(0, nestedType.Namespace);
 | 
			
		||||
 | 
			
		||||
        if (that.IsGenericType == false)
 | 
			
		||||
            return sb.Append(that.Name).ToString();
 | 
			
		||||
        if (type.IsGenericType == false)
 | 
			
		||||
            return sb.Append(type.Name).ToString();
 | 
			
		||||
 | 
			
		||||
        var genericParameters = that.GetGenericArguments();
 | 
			
		||||
        if (that.IsNested && that.DeclaringType.IsGenericType)
 | 
			
		||||
        var genericParameters = type.GetGenericArguments();
 | 
			
		||||
        if (type.IsNested && type.DeclaringType.IsGenericType)
 | 
			
		||||
        {
 | 
			
		||||
            var dic = genericParameters.ToDictionary(a => a.Name);
 | 
			
		||||
            foreach (var nestedGenericParameter in that.DeclaringType.GetGenericArguments())
 | 
			
		||||
            foreach (var nestedGenericParameter in type.DeclaringType.GetGenericArguments())
 | 
			
		||||
                if (dic.ContainsKey(nestedGenericParameter.Name))
 | 
			
		||||
                    dic.Remove(nestedGenericParameter.Name);
 | 
			
		||||
            genericParameters = dic.Values.ToArray();
 | 
			
		||||
        }
 | 
			
		||||
        if (genericParameters.Any() == false)
 | 
			
		||||
            return sb.Append(that.Name).ToString();
 | 
			
		||||
            return sb.Append(type.Name).ToString();
 | 
			
		||||
 | 
			
		||||
        sb.Append(that.Name.Remove(that.Name.IndexOf('`'))).Append("<");
 | 
			
		||||
        sb.Append(type.Name.Remove(type.Name.IndexOf('`'))).Append("<");
 | 
			
		||||
        var genericTypeIndex = 0;
 | 
			
		||||
        foreach (var genericType in genericParameters)
 | 
			
		||||
        {
 | 
			
		||||
@@ -95,6 +92,37 @@ public static partial class FreeSqlGlobalExtensions
 | 
			
		||||
        }
 | 
			
		||||
        return sb.Append(">").ToString();
 | 
			
		||||
    }
 | 
			
		||||
    internal static string DisplayCsharp(this MethodInfo method, bool isOverride)
 | 
			
		||||
    {
 | 
			
		||||
        if (method == null) return null;
 | 
			
		||||
        var sb = new StringBuilder();
 | 
			
		||||
        if (method.IsPublic) sb.Append("public ");
 | 
			
		||||
        if (method.IsAssembly) sb.Append("internal ");
 | 
			
		||||
        if (method.IsFamily) sb.Append("protected ");
 | 
			
		||||
        if (method.IsPrivate) sb.Append("private ");
 | 
			
		||||
        if (method.IsPrivate) sb.Append("private ");
 | 
			
		||||
        if (method.IsStatic) sb.Append("static ");
 | 
			
		||||
        if (method.IsAbstract && method.DeclaringType.IsInterface == false) sb.Append("abstract ");
 | 
			
		||||
        if (method.IsVirtual && method.DeclaringType.IsInterface == false) sb.Append(isOverride ? "override " : "virtual ");
 | 
			
		||||
        sb.Append(method.ReturnType.DisplayCsharp()).Append(" ").Append(method.Name);
 | 
			
		||||
 | 
			
		||||
        var genericParameters = method.GetGenericArguments();
 | 
			
		||||
        if (method.DeclaringType.IsNested && method.DeclaringType.DeclaringType.IsGenericType)
 | 
			
		||||
        {
 | 
			
		||||
            var dic = genericParameters.ToDictionary(a => a.Name);
 | 
			
		||||
            foreach (var nestedGenericParameter in method.DeclaringType.DeclaringType.GetGenericArguments())
 | 
			
		||||
                if (dic.ContainsKey(nestedGenericParameter.Name))
 | 
			
		||||
                    dic.Remove(nestedGenericParameter.Name);
 | 
			
		||||
            genericParameters = dic.Values.ToArray();
 | 
			
		||||
        }
 | 
			
		||||
        if (genericParameters.Any())
 | 
			
		||||
            sb.Append("<")
 | 
			
		||||
                .Append(string.Join(", ", genericParameters.Select(a => a.DisplayCsharp())))
 | 
			
		||||
                .Append(">");
 | 
			
		||||
 | 
			
		||||
        sb.Append("(").Append(string.Join(", ", method.GetParameters().Select(a => $"{a.ParameterType.DisplayCsharp()} {a.Name}"))).Append(")");
 | 
			
		||||
        return sb.ToString();
 | 
			
		||||
    }
 | 
			
		||||
    public static object CreateInstanceGetDefaultValue(this Type that)
 | 
			
		||||
    {
 | 
			
		||||
        if (that == null) return null;
 | 
			
		||||
 
 | 
			
		||||
@@ -2285,137 +2285,6 @@
 | 
			
		||||
            <param name="parms"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteReaderAsync(System.Func{System.Data.Common.DbDataReader,System.Threading.Tasks.Task},System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
			
		||||
            <summary>
 | 
			
		||||
            查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="readerHander"></param>
 | 
			
		||||
            <param name="cmdType"></param>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="cmdParms"></param>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteReaderAsync(System.Func{System.Data.Common.DbDataReader,System.Threading.Tasks.Task},System.String,System.Object)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            查询,ExecuteReaderAsync(dr => {}, "select * from user where age > ?age", new { age = 25 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="parms"></param>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteArrayAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
			
		||||
            <summary>
 | 
			
		||||
            查询
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="cmdParms"></param>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteArrayAsync(System.String,System.Object)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            查询,ExecuteArrayAsync("select * from user where age > ?age", new { age = 25 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="parms"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteDataSetAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
			
		||||
            <summary>
 | 
			
		||||
            查询
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="cmdParms"></param>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteDataSetAsync(System.String,System.Object)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            查询,ExecuteDataSetAsync("select * from user where age > ?age; select 2", new { age = 25 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="parms"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteDataTableAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
			
		||||
            <summary>
 | 
			
		||||
            查询
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="cmdParms"></param>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteDataTableAsync(System.String,System.Object)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            查询,ExecuteDataTableAsync("select * from user where age > ?age", new { age = 25 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="parms"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteNonQueryAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
			
		||||
            <summary>
 | 
			
		||||
            在【主库】执行
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdType"></param>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="cmdParms"></param>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteNonQueryAsync(System.String,System.Object)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            在【主库】执行,ExecuteNonQueryAsync("delete from user where age > ?age", new { age = 25 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="parms"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteScalarAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
			
		||||
            <summary>
 | 
			
		||||
            在【主库】执行
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdType"></param>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="cmdParms"></param>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.ExecuteScalarAsync(System.String,System.Object)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            在【主库】执行,ExecuteScalarAsync("select 1 from user where age > ?age", new { age = 25 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="parms"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.QueryAsync``1(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
			
		||||
            <summary>
 | 
			
		||||
            执行SQL返回对象集合,QueryAsync<User>("select * from user where age > ?age", new SqlParameter { ParameterName = "age", Value = 25 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <typeparam name="T"></typeparam>
 | 
			
		||||
            <param name="cmdType"></param>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="cmdParms"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.QueryAsync``1(System.String,System.Object)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            执行SQL返回对象集合,QueryAsync<User>("select * from user where age > ?age", new { age = 25 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <typeparam name="T"></typeparam>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="parms"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.QueryAsync``2(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
			
		||||
            <summary>
 | 
			
		||||
            执行SQL返回对象集合,Query<User>("select * from user where age > ?age; select * from address", new SqlParameter { ParameterName = "age", Value = 25 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <typeparam name="T1"></typeparam>
 | 
			
		||||
            <param name="cmdType"></param>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="cmdParms"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.IAdo.QueryAsync``2(System.String,System.Object)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            执行SQL返回对象集合,Query<User>("select * from user where age > ?age; select * from address", new { age = 25 })
 | 
			
		||||
            </summary>
 | 
			
		||||
            <typeparam name="T1"></typeparam>
 | 
			
		||||
            <param name="cmdText"></param>
 | 
			
		||||
            <param name="parms"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="E:FreeSql.IAop.ParseExpression">
 | 
			
		||||
            <summary>
 | 
			
		||||
            可自定义解析表达式
 | 
			
		||||
@@ -2939,12 +2808,6 @@
 | 
			
		||||
            <param name="timeout">超时</param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.Internal.ObjectPool.IObjectPool`1.GetAsync">
 | 
			
		||||
            <summary>
 | 
			
		||||
            获取资源
 | 
			
		||||
            </summary>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.Internal.ObjectPool.IObjectPool`1.Return(FreeSql.Internal.ObjectPool.Object{`0},System.Boolean)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            使用完毕后,归还资源
 | 
			
		||||
@@ -3015,12 +2878,6 @@
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="obj">资源对象</param>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.Internal.ObjectPool.IPolicy`1.OnGetAsync(FreeSql.Internal.ObjectPool.Object{`0})">
 | 
			
		||||
            <summary>
 | 
			
		||||
            从对象池获取对象成功的时候触发,通过该方法统计或初始化对象
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="obj">资源对象</param>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSql.Internal.ObjectPool.IPolicy`1.OnReturn(FreeSql.Internal.ObjectPool.Object{`0})">
 | 
			
		||||
            <summary>
 | 
			
		||||
            归还对象给对象池的时候触发
 | 
			
		||||
@@ -3194,11 +3051,11 @@
 | 
			
		||||
            <param name="end"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSqlGlobalExtensions.DisplayCsharp(System.Type)">
 | 
			
		||||
        <member name="M:FreeSqlGlobalExtensions.DisplayCsharp(System.Type,System.Boolean)">
 | 
			
		||||
            <summary>
 | 
			
		||||
            获取 Type 的原始 c# 文本表示
 | 
			
		||||
            </summary>
 | 
			
		||||
            <param name="that"></param>
 | 
			
		||||
            <param name="type"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </member>
 | 
			
		||||
        <member name="M:FreeSqlGlobalExtensions.Distance(System.Drawing.Point,System.Drawing.Point)">
 | 
			
		||||
 
 | 
			
		||||
@@ -1021,6 +1021,7 @@ namespace FreeSql.Internal
 | 
			
		||||
                    other3Exp = ExpressionLambdaToSqlOther(exp3, tsc);
 | 
			
		||||
                    if (string.IsNullOrEmpty(other3Exp) == false) return other3Exp;
 | 
			
		||||
                    if (exp3.IsParameter() == false) return formatSql(Expression.Lambda(exp3).Compile().DynamicInvoke(), tsc.mapType, tsc.mapColumnTmp, tsc.dbParams);
 | 
			
		||||
                    if (exp3.Method.DeclaringType == typeof(Enumerable)) throw new Exception($"未实现函数表达式 {exp3} 解析。如果正在操作导航属性集合,请使用 .AsSelect().{exp3.Method.Name}({(exp3.Arguments.Count > 1 ? "..." : "")})");
 | 
			
		||||
                    throw new Exception($"未实现函数表达式 {exp3} 解析");
 | 
			
		||||
                case ExpressionType.Parameter:
 | 
			
		||||
                case ExpressionType.MemberAccess:
 | 
			
		||||
@@ -1292,6 +1293,8 @@ namespace FreeSql.Internal
 | 
			
		||||
                                    }
 | 
			
		||||
                                    if (tb2.ColumnsByCsIgnore.ContainsKey(mp2.Member.Name))
 | 
			
		||||
                                        throw new ArgumentException($"{tb2.DbName}.{mp2.Member.Name} 被忽略,请检查 IsIgnore 设置,确认 get/set 为 public");
 | 
			
		||||
                                    if (tb2.GetTableRef(mp2.Member.Name, false) != null)
 | 
			
		||||
                                        throw new ArgumentException($"{tb2.DbName}.{mp2.Member.Name} 导航属性集合忘了 .AsSelect() 吗?如果在 ToList(a => a.{mp2.Member.Name}) 中使用,请移步参考 IncludeMany 文档。");
 | 
			
		||||
                                    throw new ArgumentException($"{tb2.DbName} 找不到列 {mp2.Member.Name}");
 | 
			
		||||
                                }
 | 
			
		||||
                                var col2 = tb2.ColumnsByCs[mp2.Member.Name];
 | 
			
		||||
 
 | 
			
		||||
@@ -74,6 +74,7 @@ namespace FreeSql.MsAccess
 | 
			
		||||
                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
			
		||||
                    if (objType != null || objType.IsArrayOrList())
 | 
			
		||||
                    {
 | 
			
		||||
                        if (argIndex >= callExp.Arguments.Count) break;
 | 
			
		||||
                        tsc.SetMapColumnTmp(null);
 | 
			
		||||
                        var args1 = getExp(callExp.Arguments[argIndex]);
 | 
			
		||||
                        var oldMapType = tsc.SetMapTypeReturnOld(tsc.mapTypeTmp);
 | 
			
		||||
 
 | 
			
		||||
@@ -101,6 +101,7 @@ namespace FreeSql.MySql
 | 
			
		||||
                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
			
		||||
                    if (objType != null || objType.IsArrayOrList())
 | 
			
		||||
                    {
 | 
			
		||||
                        if (argIndex >= callExp.Arguments.Count) break;
 | 
			
		||||
                        tsc.SetMapColumnTmp(null);
 | 
			
		||||
                        var args1 = getExp(callExp.Arguments[argIndex]);
 | 
			
		||||
                        var oldMapType = tsc.SetMapTypeReturnOld(tsc.mapTypeTmp);
 | 
			
		||||
 
 | 
			
		||||
@@ -105,6 +105,7 @@ namespace FreeSql.Odbc.Dameng
 | 
			
		||||
                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
			
		||||
                    if (objType != null || objType.IsArrayOrList())
 | 
			
		||||
                    {
 | 
			
		||||
                        if (argIndex >= callExp.Arguments.Count) break;
 | 
			
		||||
                        tsc.SetMapColumnTmp(null);
 | 
			
		||||
                        var args1 = getExp(callExp.Arguments[argIndex]);
 | 
			
		||||
                        var oldMapType = tsc.SetMapTypeReturnOld(tsc.mapTypeTmp);
 | 
			
		||||
 
 | 
			
		||||
@@ -108,6 +108,7 @@ namespace FreeSql.Odbc.Default
 | 
			
		||||
                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
			
		||||
                    if (objType != null || objType.IsArrayOrList())
 | 
			
		||||
                    {
 | 
			
		||||
                        if (argIndex >= callExp.Arguments.Count) break;
 | 
			
		||||
                        tsc.SetMapColumnTmp(null);
 | 
			
		||||
                        var args1 = getExp(callExp.Arguments[argIndex]);
 | 
			
		||||
                        var oldMapType = tsc.SetMapTypeReturnOld(tsc.mapTypeTmp);
 | 
			
		||||
 
 | 
			
		||||
@@ -101,6 +101,7 @@ namespace FreeSql.Odbc.MySql
 | 
			
		||||
                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
			
		||||
                    if (objType != null || objType.IsArrayOrList())
 | 
			
		||||
                    {
 | 
			
		||||
                        if (argIndex >= callExp.Arguments.Count) break;
 | 
			
		||||
                        tsc.SetMapColumnTmp(null);
 | 
			
		||||
                        var args1 = getExp(callExp.Arguments[argIndex]);
 | 
			
		||||
                        var oldMapType = tsc.SetMapTypeReturnOld(tsc.mapTypeTmp);
 | 
			
		||||
 
 | 
			
		||||
@@ -105,6 +105,7 @@ namespace FreeSql.Odbc.Oracle
 | 
			
		||||
                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
			
		||||
                    if (objType != null || objType.IsArrayOrList())
 | 
			
		||||
                    {
 | 
			
		||||
                        if (argIndex >= callExp.Arguments.Count) break;
 | 
			
		||||
                        tsc.SetMapColumnTmp(null);
 | 
			
		||||
                        var args1 = getExp(callExp.Arguments[argIndex]);
 | 
			
		||||
                        var oldMapType = tsc.SetMapTypeReturnOld(tsc.mapTypeTmp);
 | 
			
		||||
 
 | 
			
		||||
@@ -105,6 +105,7 @@ namespace FreeSql.Odbc.SqlServer
 | 
			
		||||
                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
			
		||||
                    if (objType != null || objType.IsArrayOrList())
 | 
			
		||||
                    {
 | 
			
		||||
                        if (argIndex >= callExp.Arguments.Count) break;
 | 
			
		||||
                        tsc.SetMapColumnTmp(null);
 | 
			
		||||
                        var args1 = getExp(callExp.Arguments[argIndex]);
 | 
			
		||||
                        var oldMapType = tsc.SetMapTypeReturnOld(tsc.mapTypeTmp);
 | 
			
		||||
 
 | 
			
		||||
@@ -105,6 +105,7 @@ namespace FreeSql.Oracle
 | 
			
		||||
                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
			
		||||
                    if (objType != null || objType.IsArrayOrList())
 | 
			
		||||
                    {
 | 
			
		||||
                        if (argIndex >= callExp.Arguments.Count) break;
 | 
			
		||||
                        tsc.SetMapColumnTmp(null);
 | 
			
		||||
                        var args1 = getExp(callExp.Arguments[argIndex]);
 | 
			
		||||
                        var oldMapType = tsc.SetMapTypeReturnOld(tsc.mapTypeTmp);
 | 
			
		||||
 
 | 
			
		||||
@@ -105,6 +105,7 @@ namespace FreeSql.SqlServer
 | 
			
		||||
                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
			
		||||
                    if (objType != null || objType.IsArrayOrList())
 | 
			
		||||
                    {
 | 
			
		||||
                        if (argIndex >= callExp.Arguments.Count) break;
 | 
			
		||||
                        tsc.SetMapColumnTmp(null);
 | 
			
		||||
                        var args1 = getExp(callExp.Arguments[argIndex]);
 | 
			
		||||
                        var oldMapType = tsc.SetMapTypeReturnOld(tsc.mapTypeTmp);
 | 
			
		||||
 
 | 
			
		||||
@@ -101,6 +101,7 @@ namespace FreeSql.Sqlite
 | 
			
		||||
                    if (objType == null) objType = callExp.Method.DeclaringType;
 | 
			
		||||
                    if (objType != null || objType.IsArrayOrList())
 | 
			
		||||
                    {
 | 
			
		||||
                        if (argIndex >= callExp.Arguments.Count) break;
 | 
			
		||||
                        tsc.SetMapColumnTmp(null);
 | 
			
		||||
                        var args1 = getExp(callExp.Arguments[argIndex]);
 | 
			
		||||
                        var oldMapType = tsc.SetMapTypeReturnOld(tsc.mapTypeTmp);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user