diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs index 33c327c56..5f7f150b1 100644 --- a/Examples/base_entity/Program.cs +++ b/Examples/base_entity/Program.cs @@ -522,6 +522,8 @@ namespace base_entity static void Main(string[] args) { + var ddultval = typeof(System.Text.Json.Nodes.JsonArray).CreateInstanceGetDefaultValue(); + var pams = new Dictionary(); var sql2rscs = Utils.ReplaceSqlConstString("'', 'SARTEN ACERO VITR.18CM''''GRAFIT''''', 'a", pams, "@lantin1"); @@ -906,22 +908,22 @@ namespace base_entity }) .ToSql(); Console.WriteLine(list0x1sql); - var sql1c2 = fsql.Select() - .GroupBy(a => new { a.Nickname, a.Avatar }) - .WithTempQuery(b => new - { - sum = b.Sum(b.Value.Sort), - b.Key.Nickname, - b.Key.Avatar, - }) - .OrderByDescending(arg => arg.sum) - .ToSql(arg => new - { - str1 = string.Concat(arg.Nickname, '-', arg.Avatar, '-'), - str2 = string.Concat(arg.Nickname, '-', arg.Avatar) - }); //报错 多括号 - //.ToOne(arg => string.Concat(arg.Nickname, '-', arg.Avatar)); //正常 - Console.WriteLine(sql1c2); + //var sql1c2 = fsql.Select() + // .GroupBy(a => new { a.Nickname, a.Avatar }) + // .WithTempQuery(b => new + // { + // sum = b.Sum(b.Value.Sort), + // b.Key.Nickname, + // b.Key.Avatar, + // }) + // .OrderByDescending(arg => arg.sum) + // .ToSql(arg => new + // { + // str1 = string.Concat(arg.Nickname, '-', arg.Avatar, '-'), + // str2 = string.Concat(arg.Nickname, '-', arg.Avatar) + // }); //报错 多括号 + // //.ToOne(arg => string.Concat(arg.Nickname, '-', arg.Avatar)); //正常 + //Console.WriteLine(sql1c2); //var clickhouseSql1 = fsql.Select().Where(a => new[] { 1, 2, 3 }.Contains(a.GroupId)).ToSql(); // var clickhouseVal1 = new[] { 1, 2, 3 }; diff --git a/Examples/base_entity/base_entity.csproj b/Examples/base_entity/base_entity.csproj index d0c055780..775357f85 100644 --- a/Examples/base_entity/base_entity.csproj +++ b/Examples/base_entity/base_entity.csproj @@ -2,7 +2,7 @@ Exe - net8.0 + net9.0 AnyCPU diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index c941a15d9..a7a94fcda 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -758,13 +758,5 @@ - - - 批量注入 Repository,可以参考代码自行调整 - - - - - diff --git a/FreeSql/Extensions/FreeSqlGlobalExtensions.cs b/FreeSql/Extensions/FreeSqlGlobalExtensions.cs index e5656ab17..2c74879c9 100644 --- a/FreeSql/Extensions/FreeSqlGlobalExtensions.cs +++ b/FreeSql/Extensions/FreeSqlGlobalExtensions.cs @@ -169,12 +169,12 @@ public static partial class FreeSqlGlobalExtensions if (that == typeof(byte[])) return default(byte[]); if (that.IsArray) return Array.CreateInstance(that.GetElementType(), 0); if (that.IsInterface || that.IsAbstract) return null; - var ctorParms = that.InternalGetTypeConstructor0OrFirst(false)?.GetParameters(); + var ctor = that.InternalGetTypeConstructor0OrFirst(false); + var ctorParms = ctor?.GetParameters(); if (ctorParms == null || ctorParms.Any() == false) return Activator.CreateInstance(that, true); - return Activator.CreateInstance(that, ctorParms - .Select(a => a.ParameterType.IsInterface || a.ParameterType.IsAbstract || a.ParameterType == typeof(string) || a.ParameterType.IsArray ? - null : - Activator.CreateInstance(a.ParameterType, null)).ToArray()); + var ctorArgs = ctorParms.Select(a => a.ParameterType.IsInterface || a.ParameterType.IsAbstract || a.ParameterType == typeof(string) || a.ParameterType.IsArray ? + null : Activator.CreateInstance(a.ParameterType, null)).ToArray(); + return ctor.Invoke(ctorArgs); } internal static NewExpression InternalNewExpression(this Type that) { @@ -186,13 +186,10 @@ public static partial class FreeSqlGlobalExtensions internal static ConstructorInfo InternalGetTypeConstructor0OrFirst(this Type that, bool isThrow = true) { var ret = _dicInternalGetTypeConstructor0OrFirst.GetOrAdd(that, tp => - new Lazy(() => - { - return tp.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[0], null) ?? - tp.GetConstructors(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) - .OrderBy(a => a.IsPublic ? 0 : 1) - .FirstOrDefault(); - })); + new Lazy(() => tp.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[0], null) ?? + tp.GetConstructors(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + .OrderBy(a => a.IsPublic ? 0 : 1) + .FirstOrDefault())); if (ret.Value == null && isThrow) throw new ArgumentException(CoreErrorStrings.Type_Cannot_Access_Constructor(that.FullName)); return ret.Value; } diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 4ccbbef74..25f23c323 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -1087,93 +1087,6 @@ - - - 动态创建实体类型 - - - - - 配置Class - - 类名 - 类标记的特性[Table(Name = "xxx")] [Index(xxxx)] - - - - - 获取类型构建器,可作为要构建的Type来引用 - - - - - 配置属性 - - 属性名称 - 属性类型 - 属性标记的特性-支持多个 - - - - - 配置属性 - - 属性名称 - 属性类型 - 该属性是否重写父类属性 - 属性标记的特性-支持多个 - - - - - 配置属性 - - 属性名称 - 属性类型 - 该属性是否重写父类属性 - 属性默认值 - 属性标记的特性-支持多个 - - - - - 配置父类 - - 父类类型 - - - - - Override属性 - - - - - - Emit动态创建出Class - Type - - - - - - Emit动态创建出Class - Type,不附带获取TableInfo - - - - - - 首字母小写 - - - - - - - 首字母大写 - - - - 获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 "" @@ -5897,28 +5810,6 @@ 对象池 - - - 动态构建Class Type - - - - - - 根据字典,创建 table 对应的实体对象 - - - - - - - - 根据实体对象,创建 table 对应的字典 - - - - - C#: that >= between && that <= and