mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 09:15:27 +08:00 
			
		
		
		
	- 修复 Ado.Query 查询字段重复时报错;#162 #165 #161 - 增加 FreeSql.Provider.MsAccess 支持 Access 数据库操作,已通过 2003/2007 版本测试;
This commit is contained in:
		@@ -37,8 +37,8 @@ namespace FreeSql.Internal
 | 
			
		||||
                case ExpressionType.NegateChecked:
 | 
			
		||||
                    parent.DbField = $"-({ExpressionLambdaToSql(exp, getTSC())})";
 | 
			
		||||
                    field.Append(", ").Append(parent.DbField);
 | 
			
		||||
                    if (index >= 0) field.Append(" as").Append(++index);
 | 
			
		||||
                    else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(" ").Append(parent.CsName);
 | 
			
		||||
                    if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
 | 
			
		||||
                    else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(_common.FieldAsAlias(parent.CsName));
 | 
			
		||||
                    return false;
 | 
			
		||||
                case ExpressionType.Convert: return ReadAnonymousField(_tables, field, parent, ref index, (exp as UnaryExpression)?.Operand, getSelectGroupingMapString, whereCascadeExpression, isAllDtoMap);
 | 
			
		||||
                case ExpressionType.Constant:
 | 
			
		||||
@@ -56,8 +56,8 @@ namespace FreeSql.Internal
 | 
			
		||||
                    else
 | 
			
		||||
                        parent.DbField = _common.FormatSql("{0}", constExp?.Value);
 | 
			
		||||
                    field.Append(", ").Append(parent.DbField);
 | 
			
		||||
                    if (index >= 0) field.Append(" as").Append(++index);
 | 
			
		||||
                    else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(" ").Append(parent.CsName);
 | 
			
		||||
                    if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
 | 
			
		||||
                    else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(_common.FieldAsAlias(parent.CsName));
 | 
			
		||||
                    return false;
 | 
			
		||||
                case ExpressionType.Call:
 | 
			
		||||
                    var callExp = exp as MethodCallExpression;
 | 
			
		||||
@@ -73,8 +73,8 @@ namespace FreeSql.Internal
 | 
			
		||||
                    else
 | 
			
		||||
                        parent.DbField = ExpressionLambdaToSql(exp, getTSC());
 | 
			
		||||
                    field.Append(", ").Append(parent.DbField);
 | 
			
		||||
                    if (index >= 0) field.Append(" as").Append(++index);
 | 
			
		||||
                    else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(" ").Append(parent.CsName);
 | 
			
		||||
                    if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
 | 
			
		||||
                    else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(_common.FieldAsAlias(parent.CsName));
 | 
			
		||||
                    return false;
 | 
			
		||||
                case ExpressionType.Parameter:
 | 
			
		||||
                case ExpressionType.MemberAccess:
 | 
			
		||||
@@ -97,7 +97,7 @@ namespace FreeSql.Internal
 | 
			
		||||
                                MapType = map[idx].Column.Attribute.MapType
 | 
			
		||||
                            };
 | 
			
		||||
                            field.Append(", ").Append(_common.QuoteReadColumn(child.MapType, child.DbField));
 | 
			
		||||
                            if (index >= 0) field.Append(" as").Append(++index);
 | 
			
		||||
                            if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
 | 
			
		||||
                            parent.Childs.Add(child);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
@@ -106,8 +106,8 @@ namespace FreeSql.Internal
 | 
			
		||||
                        parent.CsType = exp.Type;
 | 
			
		||||
                        parent.DbField = ExpressionLambdaToSql(exp, getTSC());
 | 
			
		||||
                        field.Append(", ").Append(parent.DbField);
 | 
			
		||||
                        if (index >= 0) field.Append(" as").Append(++index);
 | 
			
		||||
                        else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(" ").Append(parent.CsName);
 | 
			
		||||
                        if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
 | 
			
		||||
                        else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(_common.FieldAsAlias(parent.CsName));
 | 
			
		||||
                        parent.MapType = SearchColumnByField(_tables, null, parent.DbField)?.Attribute.MapType ?? exp.Type;
 | 
			
		||||
                        return false;
 | 
			
		||||
                    }
 | 
			
		||||
@@ -157,7 +157,7 @@ namespace FreeSql.Internal
 | 
			
		||||
                                {
 | 
			
		||||
                                    child.DbField = $"{dtTb.Alias}.{_common.QuoteSqlName(trydtocol.Attribute.Name)}";
 | 
			
		||||
                                    field.Append(", ").Append(child.DbField);
 | 
			
		||||
                                    if (index >= 0) field.Append(" as").Append(++index);
 | 
			
		||||
                                    if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
 | 
			
		||||
                                }
 | 
			
		||||
                                break;
 | 
			
		||||
                            }
 | 
			
		||||
@@ -240,7 +240,7 @@ namespace FreeSql.Internal
 | 
			
		||||
                                {
 | 
			
		||||
                                    child.DbField = $"{dtTb.Alias}.{_common.QuoteSqlName(trydtocol.Attribute.Name)}";
 | 
			
		||||
                                    field.Append(", ").Append(child.DbField);
 | 
			
		||||
                                    if (index >= 0) field.Append(" as").Append(++index);
 | 
			
		||||
                                    if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
 | 
			
		||||
                                }
 | 
			
		||||
                                break;
 | 
			
		||||
                            }
 | 
			
		||||
@@ -251,8 +251,8 @@ namespace FreeSql.Internal
 | 
			
		||||
            }
 | 
			
		||||
            parent.DbField = $"({ExpressionLambdaToSql(exp, getTSC())})";
 | 
			
		||||
            field.Append(", ").Append(parent.DbField);
 | 
			
		||||
            if (index >= 0) field.Append(" as").Append(++index);
 | 
			
		||||
            else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(" ").Append(parent.CsName);
 | 
			
		||||
            if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
 | 
			
		||||
            else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(_common.FieldAsAlias(parent.CsName));
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        public object ReadAnonymous(ReadAnonymousTypeInfo parent, DbDataReader dr, ref int index, bool notRead, ReadAnonymousDbValueRef dbValue)
 | 
			
		||||
@@ -593,7 +593,7 @@ namespace FreeSql.Internal
 | 
			
		||||
                case ExpressionType.Constant: return formatSql((exp as ConstantExpression)?.Value, tsc.mapType, tsc.mapColumnTmp, null);
 | 
			
		||||
                case ExpressionType.Conditional:
 | 
			
		||||
                    var condExp = exp as ConditionalExpression;
 | 
			
		||||
                    return $"case when {ExpressionLambdaToSql(condExp.Test, tsc)} then {ExpressionLambdaToSql(condExp.IfTrue, tsc)} else {ExpressionLambdaToSql(condExp.IfFalse, tsc)} end";
 | 
			
		||||
                    return _common.IIF(ExpressionLambdaToSql(condExp.Test, tsc), ExpressionLambdaToSql(condExp.IfTrue, tsc), ExpressionLambdaToSql(condExp.IfFalse, tsc));
 | 
			
		||||
                case ExpressionType.Call:
 | 
			
		||||
                    tsc.mapType = null;
 | 
			
		||||
                    var exp3 = exp as MethodCallExpression;
 | 
			
		||||
 
 | 
			
		||||
@@ -111,6 +111,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                    for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                    {
 | 
			
		||||
                        var name = dr.GetName(a);
 | 
			
		||||
                        if (dic.ContainsKey(name)) continue;
 | 
			
		||||
                        sbflag.Append(name).Append(":").Append(a).Append(",");
 | 
			
		||||
                        dic.Add(name, a);
 | 
			
		||||
                    }
 | 
			
		||||
@@ -153,6 +154,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                            for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                            {
 | 
			
		||||
                                var name = dr.GetName(a);
 | 
			
		||||
                                if (dic.ContainsKey(name)) continue;
 | 
			
		||||
                                sbflag.Append(name).Append(":").Append(a).Append(",");
 | 
			
		||||
                                dic.Add(name, a);
 | 
			
		||||
                            }
 | 
			
		||||
@@ -169,6 +171,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                            for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                            {
 | 
			
		||||
                                var name = dr.GetName(a);
 | 
			
		||||
                                if (dic.ContainsKey(name)) continue;
 | 
			
		||||
                                sbflag.Append(name).Append(":").Append(a).Append(",");
 | 
			
		||||
                                dic.Add(name, a);
 | 
			
		||||
                            }
 | 
			
		||||
@@ -219,6 +222,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                            for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                            {
 | 
			
		||||
                                var name = dr.GetName(a);
 | 
			
		||||
                                if (dic.ContainsKey(name)) continue;
 | 
			
		||||
                                sbflag.Append(name).Append(":").Append(a).Append(",");
 | 
			
		||||
                                dic.Add(name, a);
 | 
			
		||||
                            }
 | 
			
		||||
@@ -235,6 +239,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                            for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                            {
 | 
			
		||||
                                var name = dr.GetName(a);
 | 
			
		||||
                                if (dic.ContainsKey(name)) continue;
 | 
			
		||||
                                sbflag.Append(name).Append(":").Append(a).Append(",");
 | 
			
		||||
                                dic.Add(name, a);
 | 
			
		||||
                            }
 | 
			
		||||
@@ -251,6 +256,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                            for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                            {
 | 
			
		||||
                                var name = dr.GetName(a);
 | 
			
		||||
                                if (dic.ContainsKey(name)) continue;
 | 
			
		||||
                                sbflag.Append(name).Append(":").Append(a).Append(",");
 | 
			
		||||
                                dic.Add(name, a);
 | 
			
		||||
                            }
 | 
			
		||||
@@ -307,6 +313,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                            for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                            {
 | 
			
		||||
                                var name = dr.GetName(a);
 | 
			
		||||
                                if (dic.ContainsKey(name)) continue;
 | 
			
		||||
                                sbflag.Append(name).Append(":").Append(a).Append(",");
 | 
			
		||||
                                dic.Add(name, a);
 | 
			
		||||
                            }
 | 
			
		||||
@@ -323,6 +330,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                            for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                            {
 | 
			
		||||
                                var name = dr.GetName(a);
 | 
			
		||||
                                if (dic.ContainsKey(name)) continue;
 | 
			
		||||
                                sbflag.Append(name).Append(":").Append(a).Append(",");
 | 
			
		||||
                                dic.Add(name, a);
 | 
			
		||||
                            }
 | 
			
		||||
@@ -339,6 +347,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                            for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                            {
 | 
			
		||||
                                var name = dr.GetName(a);
 | 
			
		||||
                                if (dic.ContainsKey(name)) continue;
 | 
			
		||||
                                sbflag.Append(name).Append(":").Append(a).Append(",");
 | 
			
		||||
                                dic.Add(name, a);
 | 
			
		||||
                            }
 | 
			
		||||
@@ -355,6 +364,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                            for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                            {
 | 
			
		||||
                                var name = dr.GetName(a);
 | 
			
		||||
                                if (dic.ContainsKey(name)) continue;
 | 
			
		||||
                                sbflag.Append(name).Append(":").Append(a).Append(",");
 | 
			
		||||
                                dic.Add(name, a);
 | 
			
		||||
                            }
 | 
			
		||||
@@ -417,6 +427,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                            for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                            {
 | 
			
		||||
                                var name = dr.GetName(a);
 | 
			
		||||
                                if (dic.ContainsKey(name)) continue;
 | 
			
		||||
                                sbflag.Append(name).Append(":").Append(a).Append(",");
 | 
			
		||||
                                dic.Add(name, a);
 | 
			
		||||
                            }
 | 
			
		||||
@@ -433,6 +444,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                            for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                            {
 | 
			
		||||
                                var name = dr.GetName(a);
 | 
			
		||||
                                if (dic.ContainsKey(name)) continue;
 | 
			
		||||
                                sbflag.Append(name).Append(":").Append(a).Append(",");
 | 
			
		||||
                                dic.Add(name, a);
 | 
			
		||||
                            }
 | 
			
		||||
@@ -449,6 +461,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                            for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                            {
 | 
			
		||||
                                var name = dr.GetName(a);
 | 
			
		||||
                                if (dic.ContainsKey(name)) continue;
 | 
			
		||||
                                sbflag.Append(name).Append(":").Append(a).Append(",");
 | 
			
		||||
                                dic.Add(name, a);
 | 
			
		||||
                            }
 | 
			
		||||
@@ -465,6 +478,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                            for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                            {
 | 
			
		||||
                                var name = dr.GetName(a);
 | 
			
		||||
                                if (dic.ContainsKey(name)) continue;
 | 
			
		||||
                                sbflag.Append(name).Append(":").Append(a).Append(",");
 | 
			
		||||
                                dic.Add(name, a);
 | 
			
		||||
                            }
 | 
			
		||||
@@ -481,6 +495,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                            for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                            {
 | 
			
		||||
                                var name = dr.GetName(a);
 | 
			
		||||
                                if (dic.ContainsKey(name)) continue;
 | 
			
		||||
                                sbflag.Append(name).Append(":").Append(a).Append(",");
 | 
			
		||||
                                dic.Add(name, a);
 | 
			
		||||
                            }
 | 
			
		||||
@@ -655,7 +670,12 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                if (ret.Tables.Count <= result)
 | 
			
		||||
                {
 | 
			
		||||
                    dt = ret.Tables.Add();
 | 
			
		||||
                    for (var a = 0; a < dr.FieldCount; a++) dt.Columns.Add(dr.GetName(a));
 | 
			
		||||
                    for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                    {
 | 
			
		||||
                        var name = dr.GetName(a);
 | 
			
		||||
                        if (dt.Columns.Contains(name)) name = $"{name}_{Guid.NewGuid().ToString("N").Substring(0, 4)}";
 | 
			
		||||
                        dt.Columns.Add(name);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                object[] values = new object[dt.Columns.Count];
 | 
			
		||||
                dr.GetValues(values);
 | 
			
		||||
@@ -674,7 +694,12 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
            ExecuteReader(connection, transaction, dr =>
 | 
			
		||||
            {
 | 
			
		||||
                if (ret.Columns.Count == 0)
 | 
			
		||||
                    for (var a = 0; a < dr.FieldCount; a++) ret.Columns.Add(dr.GetName(a));
 | 
			
		||||
                    for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                    {
 | 
			
		||||
                        var name = dr.GetName(a);
 | 
			
		||||
                        if (ret.Columns.Contains(name)) name = $"{name}_{Guid.NewGuid().ToString("N").Substring(0, 4)}";
 | 
			
		||||
                        ret.Columns.Add(name);
 | 
			
		||||
                    }
 | 
			
		||||
                object[] values = new object[ret.Columns.Count];
 | 
			
		||||
                dr.GetValues(values);
 | 
			
		||||
                ret.Rows.Add(values);
 | 
			
		||||
 
 | 
			
		||||
@@ -35,6 +35,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                    for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                    {
 | 
			
		||||
                        var name = dr.GetName(a);
 | 
			
		||||
                        if (dic.ContainsKey(name)) continue;
 | 
			
		||||
                        sbflag.Append(name).Append(":").Append(a).Append(",");
 | 
			
		||||
                        dic.Add(name, a);
 | 
			
		||||
                    }
 | 
			
		||||
@@ -78,6 +79,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                            for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                            {
 | 
			
		||||
                                var name = dr.GetName(a);
 | 
			
		||||
                                if (dic.ContainsKey(name)) continue;
 | 
			
		||||
                                sbflag.Append(name).Append(":").Append(a).Append(",");
 | 
			
		||||
                                dic.Add(name, a);
 | 
			
		||||
                            }
 | 
			
		||||
@@ -94,6 +96,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                            for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                            {
 | 
			
		||||
                                var name = dr.GetName(a);
 | 
			
		||||
                                if (dic.ContainsKey(name)) continue;
 | 
			
		||||
                                sbflag.Append(name).Append(":").Append(a).Append(",");
 | 
			
		||||
                                dic.Add(name, a);
 | 
			
		||||
                            }
 | 
			
		||||
@@ -145,6 +148,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                            for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                            {
 | 
			
		||||
                                var name = dr.GetName(a);
 | 
			
		||||
                                if (dic.ContainsKey(name)) continue;
 | 
			
		||||
                                sbflag.Append(name).Append(":").Append(a).Append(",");
 | 
			
		||||
                                dic.Add(name, a);
 | 
			
		||||
                            }
 | 
			
		||||
@@ -161,6 +165,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                            for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                            {
 | 
			
		||||
                                var name = dr.GetName(a);
 | 
			
		||||
                                if (dic.ContainsKey(name)) continue;
 | 
			
		||||
                                sbflag.Append(name).Append(":").Append(a).Append(",");
 | 
			
		||||
                                dic.Add(name, a);
 | 
			
		||||
                            }
 | 
			
		||||
@@ -177,6 +182,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                            for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                            {
 | 
			
		||||
                                var name = dr.GetName(a);
 | 
			
		||||
                                if (dic.ContainsKey(name)) continue;
 | 
			
		||||
                                sbflag.Append(name).Append(":").Append(a).Append(",");
 | 
			
		||||
                                dic.Add(name, a);
 | 
			
		||||
                            }
 | 
			
		||||
@@ -234,6 +240,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                            for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                            {
 | 
			
		||||
                                var name = dr.GetName(a);
 | 
			
		||||
                                if (dic.ContainsKey(name)) continue;
 | 
			
		||||
                                sbflag.Append(name).Append(":").Append(a).Append(",");
 | 
			
		||||
                                dic.Add(name, a);
 | 
			
		||||
                            }
 | 
			
		||||
@@ -250,6 +257,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                            for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                            {
 | 
			
		||||
                                var name = dr.GetName(a);
 | 
			
		||||
                                if (dic.ContainsKey(name)) continue;
 | 
			
		||||
                                sbflag.Append(name).Append(":").Append(a).Append(",");
 | 
			
		||||
                                dic.Add(name, a);
 | 
			
		||||
                            }
 | 
			
		||||
@@ -266,6 +274,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                            for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                            {
 | 
			
		||||
                                var name = dr.GetName(a);
 | 
			
		||||
                                if (dic.ContainsKey(name)) continue;
 | 
			
		||||
                                sbflag.Append(name).Append(":").Append(a).Append(",");
 | 
			
		||||
                                dic.Add(name, a);
 | 
			
		||||
                            }
 | 
			
		||||
@@ -282,6 +291,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                            for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                            {
 | 
			
		||||
                                var name = dr.GetName(a);
 | 
			
		||||
                                if (dic.ContainsKey(name)) continue;
 | 
			
		||||
                                sbflag.Append(name).Append(":").Append(a).Append(",");
 | 
			
		||||
                                dic.Add(name, a);
 | 
			
		||||
                            }
 | 
			
		||||
@@ -345,6 +355,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                            for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                            {
 | 
			
		||||
                                var name = dr.GetName(a);
 | 
			
		||||
                                if (dic.ContainsKey(name)) continue;
 | 
			
		||||
                                sbflag.Append(name).Append(":").Append(a).Append(",");
 | 
			
		||||
                                dic.Add(name, a);
 | 
			
		||||
                            }
 | 
			
		||||
@@ -361,6 +372,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                            for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                            {
 | 
			
		||||
                                var name = dr.GetName(a);
 | 
			
		||||
                                if (dic.ContainsKey(name)) continue;
 | 
			
		||||
                                sbflag.Append(name).Append(":").Append(a).Append(",");
 | 
			
		||||
                                dic.Add(name, a);
 | 
			
		||||
                            }
 | 
			
		||||
@@ -377,6 +389,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                            for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                            {
 | 
			
		||||
                                var name = dr.GetName(a);
 | 
			
		||||
                                if (dic.ContainsKey(name)) continue;
 | 
			
		||||
                                sbflag.Append(name).Append(":").Append(a).Append(",");
 | 
			
		||||
                                dic.Add(name, a);
 | 
			
		||||
                            }
 | 
			
		||||
@@ -393,6 +406,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                            for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                            {
 | 
			
		||||
                                var name = dr.GetName(a);
 | 
			
		||||
                                if (dic.ContainsKey(name)) continue;
 | 
			
		||||
                                sbflag.Append(name).Append(":").Append(a).Append(",");
 | 
			
		||||
                                dic.Add(name, a);
 | 
			
		||||
                            }
 | 
			
		||||
@@ -409,6 +423,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                            for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                            {
 | 
			
		||||
                                var name = dr.GetName(a);
 | 
			
		||||
                                if (dic.ContainsKey(name)) continue;
 | 
			
		||||
                                sbflag.Append(name).Append(":").Append(a).Append(",");
 | 
			
		||||
                                dic.Add(name, a);
 | 
			
		||||
                            }
 | 
			
		||||
@@ -585,7 +600,12 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                if (ret.Tables.Count <= result)
 | 
			
		||||
                {
 | 
			
		||||
                    dt = ret.Tables.Add();
 | 
			
		||||
                    for (var a = 0; a < dr.FieldCount; a++) dt.Columns.Add(dr.GetName(a));
 | 
			
		||||
                    for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                    {
 | 
			
		||||
                        var name = dr.GetName(a);
 | 
			
		||||
                        if (dt.Columns.Contains(name)) name = $"{name}_{Guid.NewGuid().ToString("N").Substring(0, 4)}";
 | 
			
		||||
                        dt.Columns.Add(name);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                object[] values = new object[dt.Columns.Count];
 | 
			
		||||
                for (int a = 0; a < values.Length; a++) if (!await dr.IsDBNullAsync(a)) values[a] = await dr.GetFieldValueAsync<object>(a);
 | 
			
		||||
@@ -604,7 +624,12 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
            await ExecuteReaderAsync(connection, transaction, async dr =>
 | 
			
		||||
            {
 | 
			
		||||
                if (ret.Columns.Count == 0)
 | 
			
		||||
                    for (var a = 0; a < dr.FieldCount; a++) ret.Columns.Add(dr.GetName(a));
 | 
			
		||||
                    for (var a = 0; a < dr.FieldCount; a++)
 | 
			
		||||
                    {
 | 
			
		||||
                        var name = dr.GetName(a);
 | 
			
		||||
                        if (ret.Columns.Contains(name)) name = $"{name}_{Guid.NewGuid().ToString("N").Substring(0, 4)}";
 | 
			
		||||
                        ret.Columns.Add(name);
 | 
			
		||||
                    }
 | 
			
		||||
                object[] values = new object[ret.Columns.Count];
 | 
			
		||||
                for (int a = 0; a < values.Length; a++) if (!await dr.IsDBNullAsync(a)) values[a] = await dr.GetFieldValueAsync<object>(a);
 | 
			
		||||
                ret.Rows.Add(values);
 | 
			
		||||
 
 | 
			
		||||
@@ -88,7 +88,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
            return this;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public IInsert<T1> BatchOptions(int valuesLimit, int parameterLimit, bool autoTransaction = true)
 | 
			
		||||
        public virtual IInsert<T1> BatchOptions(int valuesLimit, int parameterLimit, bool autoTransaction = true)
 | 
			
		||||
        {
 | 
			
		||||
            _batchValuesLimit = valuesLimit;
 | 
			
		||||
            _batchParameterLimit = parameterLimit;
 | 
			
		||||
@@ -170,6 +170,8 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
        {
 | 
			
		||||
            valuesLimit = valuesLimit - 1;
 | 
			
		||||
            parameterLimit = parameterLimit - 1;
 | 
			
		||||
            if (valuesLimit <= 0) valuesLimit = 1;
 | 
			
		||||
            if (parameterLimit <= 0) parameterLimit = 999;
 | 
			
		||||
            if (_source == null || _source.Any() == false) return new List<T1>[0];
 | 
			
		||||
            if (_source.Count == 1) return new[] { _source };
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -155,7 +155,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
        public bool Any()
 | 
			
		||||
        {
 | 
			
		||||
            this.Limit(1);
 | 
			
		||||
            return this.ToList<int>("1 as1").Sum() > 0; //这里的 Sum 为了分表查询
 | 
			
		||||
            return this.ToList<int>($"{1}{_commonUtils.FieldAsAlias("as1")}").Sum() > 0; //这里的 Sum 为了分表查询
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public long Count()
 | 
			
		||||
@@ -164,7 +164,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
            _orderby = null; //解决 select count(1) from t order by id 这样的 SQL 错误
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                return this.ToList<int>("count(1) as1").Sum(); //这里的 Sum 为了分表查询
 | 
			
		||||
                return this.ToList<int>($"count(1){_commonUtils.FieldAsAlias("as1")}").Sum(); //这里的 Sum 为了分表查询
 | 
			
		||||
            }
 | 
			
		||||
            finally
 | 
			
		||||
            {
 | 
			
		||||
@@ -599,7 +599,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                        var quoteName = _commonUtils.QuoteSqlName(col.Attribute.Name);
 | 
			
		||||
                        field.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, $"{tbi.Alias}.{quoteName}"));
 | 
			
		||||
                        ++index;
 | 
			
		||||
                        if (dicfield.ContainsKey(quoteName)) field.Append(" as").Append(index);
 | 
			
		||||
                        if (dicfield.ContainsKey(quoteName)) field.Append(_commonUtils.FieldAsAlias($"as{index}"));
 | 
			
		||||
                        else dicfield.Add(quoteName, true);
 | 
			
		||||
                        ++colidx;
 | 
			
		||||
                    }
 | 
			
		||||
@@ -730,7 +730,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                        var quoteName = _commonUtils.QuoteSqlName(col.Attribute.Name);
 | 
			
		||||
                        field.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, $"{tb.Alias}.{quoteName}"));
 | 
			
		||||
                        ++index;
 | 
			
		||||
                        if (dicfield.ContainsKey(quoteName)) field.Append(" as").Append(index);
 | 
			
		||||
                        if (dicfield.ContainsKey(quoteName)) field.Append(_commonUtils.FieldAsAlias($"as{index}"));
 | 
			
		||||
                        else dicfield.Add(quoteName, true);
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
@@ -754,7 +754,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                            field.Append(_commonUtils.QuoteReadColumn(col2.Attribute.MapType, $"{tb2.Alias}.{quoteName}"));
 | 
			
		||||
                            ++index;
 | 
			
		||||
                            ++otherindex;
 | 
			
		||||
                            if (dicfield.ContainsKey(quoteName)) field.Append(" as").Append(index);
 | 
			
		||||
                            if (dicfield.ContainsKey(quoteName)) field.Append(_commonUtils.FieldAsAlias($"as{index}"));
 | 
			
		||||
                            else dicfield.Add(quoteName, true);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
@@ -851,7 +851,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                    var quoteName = _commonUtils.QuoteSqlName(col.Attribute.Name);
 | 
			
		||||
                    field.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, $"{tb.Alias}.{quoteName}"));
 | 
			
		||||
                    ++index;
 | 
			
		||||
                    if (dicfield.ContainsKey(quoteName)) field.Append(" as").Append(index);
 | 
			
		||||
                    if (dicfield.ContainsKey(quoteName)) field.Append(_commonUtils.FieldAsAlias($"as{index}"));
 | 
			
		||||
                    else dicfield.Add(quoteName, true);
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
@@ -868,7 +868,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                        var quoteName = _commonUtils.QuoteSqlName(col2.Attribute.Name);
 | 
			
		||||
                        field.Append(_commonUtils.QuoteReadColumn(col2.Attribute.MapType, $"{tb2.Alias}.{quoteName}"));
 | 
			
		||||
                        ++index;
 | 
			
		||||
                        if (dicfield.ContainsKey(quoteName)) field.Append(" as").Append(index);
 | 
			
		||||
                        if (dicfield.ContainsKey(quoteName)) field.Append(_commonUtils.FieldAsAlias($"as{index}"));
 | 
			
		||||
                        else dicfield.Add(quoteName, true);
 | 
			
		||||
                        child.Childs.Add(new ReadAnonymousTypeInfo
 | 
			
		||||
                        {
 | 
			
		||||
@@ -946,6 +946,8 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                            if (_orm.CodeFirst.IsSyncStructureToUpper) name = name.ToUpper();
 | 
			
		||||
                            if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(tb.Table.Type, name);
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                            name = name.Replace("\r\n", "\r\n    ");
 | 
			
		||||
                    }
 | 
			
		||||
                    dict.Add(tb.Table.Type, name);
 | 
			
		||||
                }
 | 
			
		||||
@@ -1035,12 +1037,12 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
 | 
			
		||||
        protected double InternalAvg(Expression exp)
 | 
			
		||||
        {
 | 
			
		||||
            var list = this.ToList<double>($"avg({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}) as1");
 | 
			
		||||
            var list = this.ToList<double>($"avg({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}");
 | 
			
		||||
            return list.Sum() / list.Count;
 | 
			
		||||
        }
 | 
			
		||||
        protected TMember InternalMax<TMember>(Expression exp) => this.ToList<TMember>($"max({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}) as1").Max();
 | 
			
		||||
        protected TMember InternalMin<TMember>(Expression exp) => this.ToList<TMember>($"min({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}) as1").Min();
 | 
			
		||||
        protected decimal InternalSum(Expression exp) => this.ToList<decimal>($"sum({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}) as1").Sum();
 | 
			
		||||
        protected TMember InternalMax<TMember>(Expression exp) => this.ToList<TMember>($"max({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}").Max();
 | 
			
		||||
        protected TMember InternalMin<TMember>(Expression exp) => this.ToList<TMember>($"min({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}").Min();
 | 
			
		||||
        protected decimal InternalSum(Expression exp) => this.ToList<decimal>($"sum({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}").Sum();
 | 
			
		||||
 | 
			
		||||
        protected ISelectGrouping<TKey, TValue> InternalGroupBy<TKey, TValue>(Expression columns)
 | 
			
		||||
        {
 | 
			
		||||
@@ -1118,7 +1120,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
        async public Task<bool> AnyAsync()
 | 
			
		||||
        {
 | 
			
		||||
            this.Limit(1);
 | 
			
		||||
            return (await this.ToListAsync<int>("1 as1")).Sum() > 0; //这里的 Sum 为了分表查询
 | 
			
		||||
            return (await this.ToListAsync<int>($"1{_commonUtils.FieldAsAlias("as1")}")).Sum() > 0; //这里的 Sum 为了分表查询
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        async public Task<long> CountAsync()
 | 
			
		||||
@@ -1127,7 +1129,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
            _orderby = null;
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                return (await this.ToListAsync<int>("count(1) as1")).Sum(); //这里的 Sum 为了分表查询
 | 
			
		||||
                return (await this.ToListAsync<int>($"count(1){_commonUtils.FieldAsAlias("as1")}")).Sum(); //这里的 Sum 为了分表查询
 | 
			
		||||
            }
 | 
			
		||||
            finally
 | 
			
		||||
            {
 | 
			
		||||
@@ -1312,12 +1314,12 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
 | 
			
		||||
        async protected Task<double> InternalAvgAsync(Expression exp)
 | 
			
		||||
        {
 | 
			
		||||
            var list = await this.ToListAsync<double>($"avg({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}) as1");
 | 
			
		||||
            var list = await this.ToListAsync<double>($"avg({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}");
 | 
			
		||||
            return list.Sum() / list.Count;
 | 
			
		||||
        }
 | 
			
		||||
        async protected Task<TMember> InternalMaxAsync<TMember>(Expression exp) => (await this.ToListAsync<TMember>($"max({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}) as1")).Max();
 | 
			
		||||
        async protected Task<TMember> InternalMinAsync<TMember>(Expression exp) => (await this.ToListAsync<TMember>($"min({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}) as1")).Min();
 | 
			
		||||
        async protected Task<decimal> InternalSumAsync(Expression exp) => (await this.ToListAsync<decimal>($"sum({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}) as1")).Sum();
 | 
			
		||||
        async protected Task<TMember> InternalMaxAsync<TMember>(Expression exp) => (await this.ToListAsync<TMember>($"max({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}")).Max();
 | 
			
		||||
        async protected Task<TMember> InternalMinAsync<TMember>(Expression exp) => (await this.ToListAsync<TMember>($"min({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}")).Min();
 | 
			
		||||
        async protected Task<decimal> InternalSumAsync(Expression exp) => (await this.ToListAsync<decimal>($"sum({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}")).Sum();
 | 
			
		||||
 | 
			
		||||
        protected Task<List<TReturn>> InternalToListAsync<TReturn>(Expression select) => this.ToListMapReaderAsync<TReturn>(this.GetExpressionField(select));
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -56,7 +56,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                        case "Where": this.InternalWhere(expCall.Arguments[0]); break;
 | 
			
		||||
                        case "WhereIf":
 | 
			
		||||
                            var whereIfCond = _commonExpression.ExpressionSelectColumn_MemberAccess(null, null, SelectTableInfoType.From, expCall.Arguments[0], false, null);
 | 
			
		||||
                            if (whereIfCond == "1" || whereIfCond == "'t'")
 | 
			
		||||
                            if (whereIfCond == "1" || whereIfCond == "'t'" || whereIfCond == "-1") //MsAccess -1
 | 
			
		||||
                                this.InternalWhere(expCall.Arguments[1]);
 | 
			
		||||
                            break;
 | 
			
		||||
                        case "OrderBy":
 | 
			
		||||
@@ -73,7 +73,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
                            if (expCall.Arguments.Count == 2 && expCall.Arguments[0].Type == typeof(bool))
 | 
			
		||||
                            {
 | 
			
		||||
                                var ifcond = _commonExpression.ExpressionSelectColumn_MemberAccess(null, null, SelectTableInfoType.From, expCall.Arguments[0], false, null);
 | 
			
		||||
                                if (ifcond == "1" || ifcond == "'t'")
 | 
			
		||||
                                if (ifcond == "1" || ifcond == "'t'" || ifcond == "-1")//MsAccess -1
 | 
			
		||||
                                    this.InternalOrderByDescending(expCall.Arguments.LastOrDefault());
 | 
			
		||||
                                break;
 | 
			
		||||
                            }
 | 
			
		||||
 
 | 
			
		||||
@@ -121,11 +121,11 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
        
 | 
			
		||||
        public List<TReturn> Select<TReturn>(Expression<Func<ISelectGroupingAggregate<TKey, TValue>, TReturn>> select) => ToList(select);
 | 
			
		||||
 | 
			
		||||
        public string ToSql<TReturn>(Expression<Func<ISelectGroupingAggregate<TKey, TValue>, TReturn>> select)
 | 
			
		||||
        public string ToSql<TReturn>(Expression<Func<ISelectGroupingAggregate<TKey, TValue>, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex)
 | 
			
		||||
        {
 | 
			
		||||
            var map = new ReadAnonymousTypeInfo();
 | 
			
		||||
            var field = new StringBuilder();
 | 
			
		||||
            var index = 0;
 | 
			
		||||
            var index = fieldAlias == FieldAliasOptions.AsProperty ? CommonExpression.ReadAnonymousFieldAsCsName : 0;
 | 
			
		||||
 | 
			
		||||
            _comonExp.ReadAnonymousField(null, field, map, ref index, select, getSelectGroupingMapString, null, true);
 | 
			
		||||
            var method = _select.GetType().GetMethod("ToSql", new[] { typeof(string) });
 | 
			
		||||
@@ -163,7 +163,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
            return this;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public long Count() => long.TryParse(string.Concat(_orm.Ado.ExecuteScalar($"select count(1) from ({this.ToSql("1 as1")}) fta")), out var trylng) ? trylng : default(long);
 | 
			
		||||
        public long Count() => long.TryParse(string.Concat(_orm.Ado.ExecuteScalar($"select count(1) from ({this.ToSql($"1{_comonExp._common.FieldAsAlias("as1")}")}) fta")), out var trylng) ? trylng : default(long);
 | 
			
		||||
        public ISelectGrouping<TKey, TValue> Count(out long count)
 | 
			
		||||
        {
 | 
			
		||||
            count = this.Count();
 | 
			
		||||
@@ -172,7 +172,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
 | 
			
		||||
#if net40
 | 
			
		||||
#else
 | 
			
		||||
        async public Task<long> CountAsync() => long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync($"select count(1) from ({this.ToSql("1 as1")}) fta")), out var trylng) ? trylng : default(long);
 | 
			
		||||
        async public Task<long> CountAsync() => long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync($"select count(1) from ({this.ToSql($"1{_comonExp._common.FieldAsAlias("as1")}")}) fta")), out var trylng) ? trylng : default(long);
 | 
			
		||||
 | 
			
		||||
        public Task<List<TReturn>> ToListAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<TKey, TValue>, TReturn>> select)
 | 
			
		||||
        {
 | 
			
		||||
 
 | 
			
		||||
@@ -93,7 +93,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
            return this;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public IUpdate<T1> BatchOptions(int rowsLimit, int parameterLimit, bool autoTransaction = true)
 | 
			
		||||
        public virtual IUpdate<T1> BatchOptions(int rowsLimit, int parameterLimit, bool autoTransaction = true)
 | 
			
		||||
        {
 | 
			
		||||
            _batchRowsLimit = rowsLimit;
 | 
			
		||||
            _batchParameterLimit = parameterLimit;
 | 
			
		||||
@@ -117,6 +117,8 @@ namespace FreeSql.Internal.CommonProvider
 | 
			
		||||
        {
 | 
			
		||||
            valuesLimit = valuesLimit - 1;
 | 
			
		||||
            parameterLimit = parameterLimit - 1;
 | 
			
		||||
            if (valuesLimit <= 0) valuesLimit = 1;
 | 
			
		||||
            if (parameterLimit <= 0) parameterLimit = 999;
 | 
			
		||||
            if (_source == null || _source.Any() == false) return new List<T1>[0];
 | 
			
		||||
            if (_source.Count == 1) return new[] { _source };
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -38,6 +38,8 @@ namespace FreeSql.Internal
 | 
			
		||||
        public abstract string NowUtc { get; }
 | 
			
		||||
        public abstract string QuoteWriteParamter(Type type, string paramterName);
 | 
			
		||||
        public abstract string QuoteReadColumn(Type type, string columnName);
 | 
			
		||||
        public virtual string FieldAsAlias(string alias) => $" {alias}";
 | 
			
		||||
        public virtual string IIF(string test, string ifTrue, string ifElse) => $"case when {test} then {ifTrue} else {ifElse} end";
 | 
			
		||||
 | 
			
		||||
        public IFreeSql _orm { get; set; }
 | 
			
		||||
        public ICodeFirst CodeFirst => _orm.CodeFirst;
 | 
			
		||||
 
 | 
			
		||||
@@ -199,7 +199,7 @@ namespace FreeSql.Internal
 | 
			
		||||
                    {
 | 
			
		||||
                        case DataType.MySql:
 | 
			
		||||
                        case DataType.OdbcMySql:
 | 
			
		||||
                            if (strlen < 0) colattr.DbType = "text";
 | 
			
		||||
                            if (strlen < 0) colattr.DbType = "TEXT";
 | 
			
		||||
                            else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})");
 | 
			
		||||
                            break;
 | 
			
		||||
                        case DataType.SqlServer:
 | 
			
		||||
@@ -209,7 +209,7 @@ namespace FreeSql.Internal
 | 
			
		||||
                            break;
 | 
			
		||||
                        case DataType.PostgreSQL:
 | 
			
		||||
                        case DataType.OdbcPostgreSQL:
 | 
			
		||||
                            if (strlen < 0) colattr.DbType = "text";
 | 
			
		||||
                            if (strlen < 0) colattr.DbType = "TEXT";
 | 
			
		||||
                            else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})");
 | 
			
		||||
                            break;
 | 
			
		||||
                        case DataType.Oracle:
 | 
			
		||||
@@ -219,7 +219,12 @@ namespace FreeSql.Internal
 | 
			
		||||
                            else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})");
 | 
			
		||||
                            break;
 | 
			
		||||
                        case DataType.Sqlite:
 | 
			
		||||
                            if (strlen < 0) colattr.DbType = "text";
 | 
			
		||||
                            if (strlen < 0) colattr.DbType = "TEXT";
 | 
			
		||||
                            else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})");
 | 
			
		||||
                            break;
 | 
			
		||||
                        case DataType.MsAccess:
 | 
			
		||||
                            charPatten = @"(CHAR|CHAR2|CHARACTER|TEXT)\s*(\([^\)]*\))?";
 | 
			
		||||
                            if (strlen < 0) colattr.DbType = "LONGTEXT";
 | 
			
		||||
                            else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})");
 | 
			
		||||
                            break;
 | 
			
		||||
                    }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user