diff --git a/FreeSql.Tests/Sqlite/SqliteAdo/SqliteAdoTest.cs b/FreeSql.Tests/Sqlite/SqliteAdo/SqliteAdoTest.cs index 2edecd2e..59dafe55 100644 --- a/FreeSql.Tests/Sqlite/SqliteAdo/SqliteAdoTest.cs +++ b/FreeSql.Tests/Sqlite/SqliteAdo/SqliteAdoTest.cs @@ -32,6 +32,13 @@ namespace FreeSql.Tests.Sqlite { [Fact] public void Query() { + + var t0 = g.sqlite.Ado.Query("select * from \"song\""); + + var t1 = g.sqlite.Ado.Query("select id, url, create_time from \"song\""); + + var t2 = g.sqlite.Ado.Query("select id, url, create_time test_time from \"song\""); + var t3 = g.sqlite.Ado.Query("select * from \"song\""); var t4 = g.sqlite.Ado.Query<(int, string, string)>("select * from \"song\""); @@ -49,5 +56,14 @@ namespace FreeSql.Tests.Sqlite { public string Path { get; set; } public string Title2 { get; set; } } + + class testallDto { + public int Id { get; set; } + public string Title { get; set; } + public string Url { get; set; } + public DateTime Test_time { get; set; } + public DateTime Create_time { get; set; } + public bool Is_deleted { get; set; } + } } } diff --git a/FreeSql/FreeSql.csproj b/FreeSql/FreeSql.csproj index 352b74cf..fb201dc6 100644 --- a/FreeSql/FreeSql.csproj +++ b/FreeSql/FreeSql.csproj @@ -2,7 +2,7 @@ netstandard2.0 - 0.5.15 + 0.5.16 true YeXiangQin FreeSql is the most convenient ORM in dotnet. It supports Mysql, Postgresql, SqlServer, Oracle and Sqlite. diff --git a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs index 45b5c117..4412b573 100644 --- a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs +++ b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs @@ -75,7 +75,12 @@ namespace FreeSql.Internal.CommonProvider { if (isThrowException) throw e; } - internal static ConcurrentDictionary dicQueryTypeGetProperties = new ConcurrentDictionary(); + internal static ConcurrentDictionary> dicQueryTypeGetProperties = new ConcurrentDictionary>(); + internal Dictionary GetQueryTypeProperties(Type type) { + var tb = _util.GetTableByEntity(type); + var props = tb?.Properties ?? dicQueryTypeGetProperties.GetOrAdd(type, k => type.GetProperties().ToDictionary(a => a.Name, a => a, StringComparer.CurrentCultureIgnoreCase)); + return props; + } public List Query(string cmdText, object parms = null) => Query(null, null, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms)); public List Query(DbTransaction transaction, string cmdText, object parms = null) => Query(null, transaction, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms)); public List Query(DbConnection connection, DbTransaction transaction, string cmdText, object parms = null) => Query(connection, transaction, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms)); @@ -87,7 +92,7 @@ namespace FreeSql.Internal.CommonProvider { var type = typeof(T); string flag = null; int[] indexes = null; - var props = dicQueryTypeGetProperties.GetOrAdd(type, k => type.GetProperties()); + var props = GetQueryTypeProperties(type); ExecuteReader(connection, transaction, dr => { if (indexes == null) { var sbflag = new StringBuilder().Append("query"); @@ -97,7 +102,7 @@ namespace FreeSql.Internal.CommonProvider { sbflag.Append(name).Append(":").Append(a).Append(","); dic.Add(name, a); } - indexes = props.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); + indexes = props.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); flag = sbflag.ToString(); } ret.Add((T)Utils.ExecuteArrayRowReadClassOrTuple(flag, type, indexes, dr, 0, _util).Value); @@ -116,13 +121,13 @@ namespace FreeSql.Internal.CommonProvider { var type1 = typeof(T1); string flag1 = null; int[] indexes1 = null; - var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties()); + var props1 = GetQueryTypeProperties(type1); var ret2 = new List(); var type2 = typeof(T2); string flag2 = null; int[] indexes2 = null; - var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties()); + var props2 = GetQueryTypeProperties(type2); ExecuteReaderMultiple(2, connection, transaction, (dr, result) => { switch(result) { case 0: @@ -134,7 +139,7 @@ namespace FreeSql.Internal.CommonProvider { sbflag.Append(name).Append(":").Append(a).Append(","); dic.Add(name, a); } - indexes1 = props1.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); + indexes1 = props1.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); flag1 = sbflag.ToString(); } ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value); @@ -148,7 +153,7 @@ namespace FreeSql.Internal.CommonProvider { sbflag.Append(name).Append(":").Append(a).Append(","); dic.Add(name, a); } - indexes2 = props2.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); + indexes2 = props2.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); flag2 = sbflag.ToString(); } ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value); @@ -169,19 +174,19 @@ namespace FreeSql.Internal.CommonProvider { var type1 = typeof(T1); string flag1 = null; int[] indexes1 = null; - var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties()); + var props1 = GetQueryTypeProperties(type1); var ret2 = new List(); var type2 = typeof(T2); string flag2 = null; int[] indexes2 = null; - var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties()); + var props2 = GetQueryTypeProperties(type2); var ret3 = new List(); var type3 = typeof(T3); string flag3 = null; int[] indexes3 = null; - var props3 = dicQueryTypeGetProperties.GetOrAdd(type3, k => type1.GetProperties()); + var props3 = GetQueryTypeProperties(type3); ExecuteReaderMultiple(3, connection, transaction, (dr, result) => { switch (result) { case 0: @@ -193,7 +198,7 @@ namespace FreeSql.Internal.CommonProvider { sbflag.Append(name).Append(":").Append(a).Append(","); dic.Add(name, a); } - indexes1 = props1.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); + indexes1 = props1.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); flag1 = sbflag.ToString(); } ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value); @@ -207,7 +212,7 @@ namespace FreeSql.Internal.CommonProvider { sbflag.Append(name).Append(":").Append(a).Append(","); dic.Add(name, a); } - indexes2 = props2.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); + indexes2 = props2.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); flag2 = sbflag.ToString(); } ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value); @@ -221,7 +226,7 @@ namespace FreeSql.Internal.CommonProvider { sbflag.Append(name).Append(":").Append(a).Append(","); dic.Add(name, a); } - indexes3 = props3.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); + indexes3 = props3.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); flag3 = sbflag.ToString(); } ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, dr, 0, _util).Value); @@ -242,25 +247,25 @@ namespace FreeSql.Internal.CommonProvider { var type1 = typeof(T1); string flag1 = null; int[] indexes1 = null; - var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties()); + var props1 = GetQueryTypeProperties(type1); var ret2 = new List(); var type2 = typeof(T2); string flag2 = null; int[] indexes2 = null; - var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties()); + var props2 = GetQueryTypeProperties(type2); var ret3 = new List(); var type3 = typeof(T3); string flag3 = null; int[] indexes3 = null; - var props3 = dicQueryTypeGetProperties.GetOrAdd(type3, k => type1.GetProperties()); + var props3 = GetQueryTypeProperties(type3); var ret4 = new List(); var type4 = typeof(T4); string flag4 = null; int[] indexes4 = null; - var props4 = dicQueryTypeGetProperties.GetOrAdd(type4, k => type1.GetProperties()); + var props4 = GetQueryTypeProperties(type4); ExecuteReaderMultiple(4, connection, transaction, (dr, result) => { switch (result) { case 0: @@ -272,7 +277,7 @@ namespace FreeSql.Internal.CommonProvider { sbflag.Append(name).Append(":").Append(a).Append(","); dic.Add(name, a); } - indexes1 = props1.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); + indexes1 = props1.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); flag1 = sbflag.ToString(); } ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value); @@ -286,7 +291,7 @@ namespace FreeSql.Internal.CommonProvider { sbflag.Append(name).Append(":").Append(a).Append(","); dic.Add(name, a); } - indexes2 = props2.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); + indexes2 = props2.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); flag2 = sbflag.ToString(); } ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value); @@ -300,7 +305,7 @@ namespace FreeSql.Internal.CommonProvider { sbflag.Append(name).Append(":").Append(a).Append(","); dic.Add(name, a); } - indexes3 = props3.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); + indexes3 = props3.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); flag3 = sbflag.ToString(); } ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, dr, 0, _util).Value); @@ -314,7 +319,7 @@ namespace FreeSql.Internal.CommonProvider { sbflag.Append(name).Append(":").Append(a).Append(","); dic.Add(name, a); } - indexes4 = props4.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); + indexes4 = props4.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); flag4 = sbflag.ToString(); } ret4.Add((T4)Utils.ExecuteArrayRowReadClassOrTuple(flag4, type4, indexes4, dr, 0, _util).Value); @@ -335,31 +340,31 @@ namespace FreeSql.Internal.CommonProvider { var type1 = typeof(T1); string flag1 = null; int[] indexes1 = null; - var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties()); + var props1 = GetQueryTypeProperties(type1); var ret2 = new List(); var type2 = typeof(T2); string flag2 = null; int[] indexes2 = null; - var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties()); + var props2 = GetQueryTypeProperties(type2); var ret3 = new List(); var type3 = typeof(T3); string flag3 = null; int[] indexes3 = null; - var props3 = dicQueryTypeGetProperties.GetOrAdd(type3, k => type1.GetProperties()); + var props3 = GetQueryTypeProperties(type3); var ret4 = new List(); var type4 = typeof(T4); string flag4 = null; int[] indexes4 = null; - var props4 = dicQueryTypeGetProperties.GetOrAdd(type4, k => type1.GetProperties()); + var props4 = GetQueryTypeProperties(type4); var ret5 = new List(); var type5 = typeof(T5); string flag5 = null; int[] indexes5 = null; - var props5 = dicQueryTypeGetProperties.GetOrAdd(type5, k => type1.GetProperties()); + var props5 = GetQueryTypeProperties(type5); ExecuteReaderMultiple(5, connection, transaction, (dr, result) => { switch (result) { case 0: @@ -371,7 +376,7 @@ namespace FreeSql.Internal.CommonProvider { sbflag.Append(name).Append(":").Append(a).Append(","); dic.Add(name, a); } - indexes1 = props1.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); + indexes1 = props1.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); flag1 = sbflag.ToString(); } ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value); @@ -385,7 +390,7 @@ namespace FreeSql.Internal.CommonProvider { sbflag.Append(name).Append(":").Append(a).Append(","); dic.Add(name, a); } - indexes2 = props2.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); + indexes2 = props2.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); flag2 = sbflag.ToString(); } ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value); @@ -399,7 +404,7 @@ namespace FreeSql.Internal.CommonProvider { sbflag.Append(name).Append(":").Append(a).Append(","); dic.Add(name, a); } - indexes3 = props3.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); + indexes3 = props3.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); flag3 = sbflag.ToString(); } ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, dr, 0, _util).Value); @@ -413,7 +418,7 @@ namespace FreeSql.Internal.CommonProvider { sbflag.Append(name).Append(":").Append(a).Append(","); dic.Add(name, a); } - indexes4 = props4.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); + indexes4 = props4.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); flag4 = sbflag.ToString(); } ret4.Add((T4)Utils.ExecuteArrayRowReadClassOrTuple(flag4, type4, indexes4, dr, 0, _util).Value); @@ -427,7 +432,7 @@ namespace FreeSql.Internal.CommonProvider { sbflag.Append(name).Append(":").Append(a).Append(","); dic.Add(name, a); } - indexes5 = props5.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); + indexes5 = props5.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); flag5 = sbflag.ToString(); } ret5.Add((T5)Utils.ExecuteArrayRowReadClassOrTuple(flag5, type5, indexes5, dr, 0, _util).Value); diff --git a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderAsync.cs b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderAsync.cs index 4311012b..7b711256 100644 --- a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderAsync.cs +++ b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderAsync.cs @@ -20,7 +20,7 @@ namespace FreeSql.Internal.CommonProvider { var type = typeof(T); string flag = null; int[] indexes = null; - var props = dicQueryTypeGetProperties.GetOrAdd(type, k => type.GetProperties()); + var props = GetQueryTypeProperties(type); await ExecuteReaderAsync(connection, transaction, dr => { if (indexes == null) { var sbflag = new StringBuilder().Append("query"); @@ -30,7 +30,7 @@ namespace FreeSql.Internal.CommonProvider { sbflag.Append(name).Append(":").Append(a).Append(","); dic.Add(name, a); } - indexes = props.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); + indexes = props.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); flag = sbflag.ToString(); } ret.Add((T)Utils.ExecuteArrayRowReadClassOrTuple(flag, type, indexes, dr, 0, _util).Value); @@ -50,13 +50,13 @@ namespace FreeSql.Internal.CommonProvider { var type1 = typeof(T1); string flag1 = null; int[] indexes1 = null; - var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties()); + var props1 = GetQueryTypeProperties(type1); var ret2 = new List(); var type2 = typeof(T2); string flag2 = null; int[] indexes2 = null; - var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties()); + var props2 = GetQueryTypeProperties(type2); await ExecuteReaderMultipleAsync(2, connection, transaction, (dr, result) => { switch (result) { case 0: @@ -68,7 +68,7 @@ namespace FreeSql.Internal.CommonProvider { sbflag.Append(name).Append(":").Append(a).Append(","); dic.Add(name, a); } - indexes1 = props1.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); + indexes1 = props1.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); flag1 = sbflag.ToString(); } ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value); @@ -82,7 +82,7 @@ namespace FreeSql.Internal.CommonProvider { sbflag.Append(name).Append(":").Append(a).Append(","); dic.Add(name, a); } - indexes2 = props2.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); + indexes2 = props2.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); flag2 = sbflag.ToString(); } ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value); @@ -104,19 +104,19 @@ namespace FreeSql.Internal.CommonProvider { var type1 = typeof(T1); string flag1 = null; int[] indexes1 = null; - var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties()); + var props1 = GetQueryTypeProperties(type1); var ret2 = new List(); var type2 = typeof(T2); string flag2 = null; int[] indexes2 = null; - var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties()); + var props2 = GetQueryTypeProperties(type2); var ret3 = new List(); var type3 = typeof(T3); string flag3 = null; int[] indexes3 = null; - var props3 = dicQueryTypeGetProperties.GetOrAdd(type3, k => type1.GetProperties()); + var props3 = GetQueryTypeProperties(type3); await ExecuteReaderMultipleAsync(3, connection, transaction, (dr, result) => { switch (result) { case 0: @@ -128,7 +128,7 @@ namespace FreeSql.Internal.CommonProvider { sbflag.Append(name).Append(":").Append(a).Append(","); dic.Add(name, a); } - indexes1 = props1.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); + indexes1 = props1.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); flag1 = sbflag.ToString(); } ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value); @@ -142,7 +142,7 @@ namespace FreeSql.Internal.CommonProvider { sbflag.Append(name).Append(":").Append(a).Append(","); dic.Add(name, a); } - indexes2 = props2.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); + indexes2 = props2.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); flag2 = sbflag.ToString(); } ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value); @@ -156,7 +156,7 @@ namespace FreeSql.Internal.CommonProvider { sbflag.Append(name).Append(":").Append(a).Append(","); dic.Add(name, a); } - indexes3 = props3.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); + indexes3 = props3.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); flag3 = sbflag.ToString(); } ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, dr, 0, _util).Value); @@ -178,25 +178,25 @@ namespace FreeSql.Internal.CommonProvider { var type1 = typeof(T1); string flag1 = null; int[] indexes1 = null; - var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties()); + var props1 = GetQueryTypeProperties(type1); var ret2 = new List(); var type2 = typeof(T2); string flag2 = null; int[] indexes2 = null; - var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties()); + var props2 = GetQueryTypeProperties(type2); var ret3 = new List(); var type3 = typeof(T3); string flag3 = null; int[] indexes3 = null; - var props3 = dicQueryTypeGetProperties.GetOrAdd(type3, k => type1.GetProperties()); + var props3 = GetQueryTypeProperties(type3); var ret4 = new List(); var type4 = typeof(T4); string flag4 = null; int[] indexes4 = null; - var props4 = dicQueryTypeGetProperties.GetOrAdd(type4, k => type1.GetProperties()); + var props4 = GetQueryTypeProperties(type4); await ExecuteReaderMultipleAsync(4, connection, transaction, (dr, result) => { switch (result) { case 0: @@ -208,7 +208,7 @@ namespace FreeSql.Internal.CommonProvider { sbflag.Append(name).Append(":").Append(a).Append(","); dic.Add(name, a); } - indexes1 = props1.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); + indexes1 = props1.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); flag1 = sbflag.ToString(); } ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value); @@ -222,7 +222,7 @@ namespace FreeSql.Internal.CommonProvider { sbflag.Append(name).Append(":").Append(a).Append(","); dic.Add(name, a); } - indexes2 = props2.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); + indexes2 = props2.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); flag2 = sbflag.ToString(); } ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value); @@ -236,7 +236,7 @@ namespace FreeSql.Internal.CommonProvider { sbflag.Append(name).Append(":").Append(a).Append(","); dic.Add(name, a); } - indexes3 = props3.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); + indexes3 = props3.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); flag3 = sbflag.ToString(); } ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, dr, 0, _util).Value); @@ -250,7 +250,7 @@ namespace FreeSql.Internal.CommonProvider { sbflag.Append(name).Append(":").Append(a).Append(","); dic.Add(name, a); } - indexes4 = props4.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); + indexes4 = props4.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); flag4 = sbflag.ToString(); } ret4.Add((T4)Utils.ExecuteArrayRowReadClassOrTuple(flag4, type4, indexes4, dr, 0, _util).Value); @@ -272,31 +272,31 @@ namespace FreeSql.Internal.CommonProvider { var type1 = typeof(T1); string flag1 = null; int[] indexes1 = null; - var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties()); + var props1 = GetQueryTypeProperties(type1); var ret2 = new List(); var type2 = typeof(T2); string flag2 = null; int[] indexes2 = null; - var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties()); + var props2 = GetQueryTypeProperties(type2); var ret3 = new List(); var type3 = typeof(T3); string flag3 = null; int[] indexes3 = null; - var props3 = dicQueryTypeGetProperties.GetOrAdd(type3, k => type1.GetProperties()); + var props3 = GetQueryTypeProperties(type3); var ret4 = new List(); var type4 = typeof(T4); string flag4 = null; int[] indexes4 = null; - var props4 = dicQueryTypeGetProperties.GetOrAdd(type4, k => type1.GetProperties()); + var props4 = GetQueryTypeProperties(type4); var ret5 = new List(); var type5 = typeof(T5); string flag5 = null; int[] indexes5 = null; - var props5 = dicQueryTypeGetProperties.GetOrAdd(type5, k => type1.GetProperties()); + var props5 = GetQueryTypeProperties(type5); await ExecuteReaderMultipleAsync(5, connection, transaction, (dr, result) => { switch (result) { case 0: @@ -308,7 +308,7 @@ namespace FreeSql.Internal.CommonProvider { sbflag.Append(name).Append(":").Append(a).Append(","); dic.Add(name, a); } - indexes1 = props1.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); + indexes1 = props1.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); flag1 = sbflag.ToString(); } ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value); @@ -322,7 +322,7 @@ namespace FreeSql.Internal.CommonProvider { sbflag.Append(name).Append(":").Append(a).Append(","); dic.Add(name, a); } - indexes2 = props2.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); + indexes2 = props2.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); flag2 = sbflag.ToString(); } ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value); @@ -336,7 +336,7 @@ namespace FreeSql.Internal.CommonProvider { sbflag.Append(name).Append(":").Append(a).Append(","); dic.Add(name, a); } - indexes3 = props3.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); + indexes3 = props3.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); flag3 = sbflag.ToString(); } ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, dr, 0, _util).Value); @@ -350,7 +350,7 @@ namespace FreeSql.Internal.CommonProvider { sbflag.Append(name).Append(":").Append(a).Append(","); dic.Add(name, a); } - indexes4 = props4.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); + indexes4 = props4.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); flag4 = sbflag.ToString(); } ret4.Add((T4)Utils.ExecuteArrayRowReadClassOrTuple(flag4, type4, indexes4, dr, 0, _util).Value); @@ -364,7 +364,7 @@ namespace FreeSql.Internal.CommonProvider { sbflag.Append(name).Append(":").Append(a).Append(","); dic.Add(name, a); } - indexes5 = props5.Select(a => dic.TryGetValue(a.Name, out var tryint) ? tryint : -1).ToArray(); + indexes5 = props5.Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); flag5 = sbflag.ToString(); } ret5.Add((T5)Utils.ExecuteArrayRowReadClassOrTuple(flag5, type5, indexes5, dr, 0, _util).Value); diff --git a/FreeSql/Internal/UtilsExpressionTree.cs b/FreeSql/Internal/UtilsExpressionTree.cs index 853f849e..f1b64a84 100644 --- a/FreeSql/Internal/UtilsExpressionTree.cs +++ b/FreeSql/Internal/UtilsExpressionTree.cs @@ -941,7 +941,10 @@ namespace FreeSql.Internal { var props = type.GetProperties();//.ToDictionary(a => a.Name, a => a, StringComparer.CurrentCultureIgnoreCase); var propIndex = 0; foreach (var prop in props) { - if (typetb.ColumnsByCsIgnore.ContainsKey(prop.Name)) continue; + if (typetb.ColumnsByCsIgnore.ContainsKey(prop.Name)) { + ++propIndex; + continue; + } var readType = typetb.ColumnsByCs.TryGetValue(prop.Name, out var trycol) ? trycol.Attribute.MapType : prop.PropertyType; var ispkExp = new List();