mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-06-18 20:08:15 +08:00
- 修改 Query/ToList 混合使用时,可能导致的 ET 缓存 bug;
This commit is contained in:
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netstandard2.0</TargetFramework>
|
<TargetFramework>netstandard2.0</TargetFramework>
|
||||||
<Version>0.5.14</Version>
|
<Version>0.5.15</Version>
|
||||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||||
<Authors>YeXiangQin</Authors>
|
<Authors>YeXiangQin</Authors>
|
||||||
<Description>FreeSql is the most convenient ORM in dotnet. It supports Mysql, Postgresql, SqlServer, Oracle and Sqlite.</Description>
|
<Description>FreeSql is the most convenient ORM in dotnet. It supports Mysql, Postgresql, SqlServer, Oracle and Sqlite.</Description>
|
||||||
|
@ -85,16 +85,22 @@ namespace FreeSql.Internal.CommonProvider {
|
|||||||
var ret = new List<T>();
|
var ret = new List<T>();
|
||||||
if (string.IsNullOrEmpty(cmdText)) return ret;
|
if (string.IsNullOrEmpty(cmdText)) return ret;
|
||||||
var type = typeof(T);
|
var type = typeof(T);
|
||||||
|
string flag = null;
|
||||||
int[] indexes = null;
|
int[] indexes = null;
|
||||||
var props = dicQueryTypeGetProperties.GetOrAdd(type, k => type.GetProperties());
|
var props = dicQueryTypeGetProperties.GetOrAdd(type, k => type.GetProperties());
|
||||||
ExecuteReader(connection, transaction, dr => {
|
ExecuteReader(connection, transaction, dr => {
|
||||||
if (indexes == null) {
|
if (indexes == null) {
|
||||||
|
var sbflag = new StringBuilder().Append("query");
|
||||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
for (var a = 0; a < dr.FieldCount; a++)
|
for (var a = 0; a < dr.FieldCount; a++) {
|
||||||
dic.Add(dr.GetName(a), a);
|
var name = dr.GetName(a);
|
||||||
|
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.Name, out var tryint) ? tryint : -1).ToArray();
|
||||||
|
flag = sbflag.ToString();
|
||||||
}
|
}
|
||||||
ret.Add((T)Utils.ExecuteArrayRowReadClassOrTuple(type, indexes, dr, 0, _util).Value);
|
ret.Add((T)Utils.ExecuteArrayRowReadClassOrTuple(flag, type, indexes, dr, 0, _util).Value);
|
||||||
}, cmdType, cmdText, cmdParms);
|
}, cmdType, cmdText, cmdParms);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -108,32 +114,44 @@ namespace FreeSql.Internal.CommonProvider {
|
|||||||
if (string.IsNullOrEmpty(cmdText)) return (new List<T1>(), new List<T2>());
|
if (string.IsNullOrEmpty(cmdText)) return (new List<T1>(), new List<T2>());
|
||||||
var ret1 = new List<T1>();
|
var ret1 = new List<T1>();
|
||||||
var type1 = typeof(T1);
|
var type1 = typeof(T1);
|
||||||
|
string flag1 = null;
|
||||||
int[] indexes1 = null;
|
int[] indexes1 = null;
|
||||||
var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties());
|
var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties());
|
||||||
|
|
||||||
var ret2 = new List<T2>();
|
var ret2 = new List<T2>();
|
||||||
var type2 = typeof(T2);
|
var type2 = typeof(T2);
|
||||||
|
string flag2 = null;
|
||||||
int[] indexes2 = null;
|
int[] indexes2 = null;
|
||||||
var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties());
|
var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties());
|
||||||
ExecuteReaderMultiple(2, connection, transaction, (dr, result) => {
|
ExecuteReaderMultiple(2, connection, transaction, (dr, result) => {
|
||||||
switch(result) {
|
switch(result) {
|
||||||
case 0:
|
case 0:
|
||||||
if (indexes1 == null) {
|
if (indexes1 == null) {
|
||||||
|
var sbflag = new StringBuilder().Append("query");
|
||||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
for (var a = 0; a < dr.FieldCount; a++)
|
for (var a = 0; a < dr.FieldCount; a++) {
|
||||||
dic.Add(dr.GetName(a), a);
|
var name = dr.GetName(a);
|
||||||
|
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.Name, out var tryint) ? tryint : -1).ToArray();
|
||||||
|
flag1 = sbflag.ToString();
|
||||||
}
|
}
|
||||||
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(type1, indexes1, dr, 0, _util).Value);
|
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
if (indexes2 == null) {
|
if (indexes2 == null) {
|
||||||
|
var sbflag = new StringBuilder().Append("query");
|
||||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
for (var a = 0; a < dr.FieldCount; a++)
|
for (var a = 0; a < dr.FieldCount; a++) {
|
||||||
dic.Add(dr.GetName(a), a);
|
var name = dr.GetName(a);
|
||||||
|
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.Name, out var tryint) ? tryint : -1).ToArray();
|
||||||
|
flag2 = sbflag.ToString();
|
||||||
}
|
}
|
||||||
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(type2, indexes2, dr, 0, _util).Value);
|
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}, cmdType, cmdText, cmdParms);
|
}, cmdType, cmdText, cmdParms);
|
||||||
@ -149,46 +167,64 @@ namespace FreeSql.Internal.CommonProvider {
|
|||||||
if (string.IsNullOrEmpty(cmdText)) return (new List<T1>(), new List<T2>(), new List<T3>());
|
if (string.IsNullOrEmpty(cmdText)) return (new List<T1>(), new List<T2>(), new List<T3>());
|
||||||
var ret1 = new List<T1>();
|
var ret1 = new List<T1>();
|
||||||
var type1 = typeof(T1);
|
var type1 = typeof(T1);
|
||||||
|
string flag1 = null;
|
||||||
int[] indexes1 = null;
|
int[] indexes1 = null;
|
||||||
var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties());
|
var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties());
|
||||||
|
|
||||||
var ret2 = new List<T2>();
|
var ret2 = new List<T2>();
|
||||||
var type2 = typeof(T2);
|
var type2 = typeof(T2);
|
||||||
|
string flag2 = null;
|
||||||
int[] indexes2 = null;
|
int[] indexes2 = null;
|
||||||
var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties());
|
var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties());
|
||||||
|
|
||||||
var ret3 = new List<T3>();
|
var ret3 = new List<T3>();
|
||||||
var type3 = typeof(T3);
|
var type3 = typeof(T3);
|
||||||
|
string flag3 = null;
|
||||||
int[] indexes3 = null;
|
int[] indexes3 = null;
|
||||||
var props3 = dicQueryTypeGetProperties.GetOrAdd(type3, k => type1.GetProperties());
|
var props3 = dicQueryTypeGetProperties.GetOrAdd(type3, k => type1.GetProperties());
|
||||||
ExecuteReaderMultiple(3, connection, transaction, (dr, result) => {
|
ExecuteReaderMultiple(3, connection, transaction, (dr, result) => {
|
||||||
switch (result) {
|
switch (result) {
|
||||||
case 0:
|
case 0:
|
||||||
if (indexes1 == null) {
|
if (indexes1 == null) {
|
||||||
|
var sbflag = new StringBuilder().Append("query");
|
||||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
for (var a = 0; a < dr.FieldCount; a++)
|
for (var a = 0; a < dr.FieldCount; a++) {
|
||||||
dic.Add(dr.GetName(a), a);
|
var name = dr.GetName(a);
|
||||||
|
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.Name, out var tryint) ? tryint : -1).ToArray();
|
||||||
|
flag1 = sbflag.ToString();
|
||||||
}
|
}
|
||||||
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(type1, indexes1, dr, 0, _util).Value);
|
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
if (indexes2 == null) {
|
if (indexes2 == null) {
|
||||||
|
var sbflag = new StringBuilder().Append("query");
|
||||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
for (var a = 0; a < dr.FieldCount; a++)
|
for (var a = 0; a < dr.FieldCount; a++) {
|
||||||
dic.Add(dr.GetName(a), a);
|
var name = dr.GetName(a);
|
||||||
|
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.Name, out var tryint) ? tryint : -1).ToArray();
|
||||||
|
flag2 = sbflag.ToString();
|
||||||
}
|
}
|
||||||
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(type2, indexes2, dr, 0, _util).Value);
|
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if (indexes3 == null) {
|
if (indexes3 == null) {
|
||||||
|
var sbflag = new StringBuilder().Append("query");
|
||||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
for (var a = 0; a < dr.FieldCount; a++)
|
for (var a = 0; a < dr.FieldCount; a++) {
|
||||||
dic.Add(dr.GetName(a), a);
|
var name = dr.GetName(a);
|
||||||
|
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.Name, out var tryint) ? tryint : -1).ToArray();
|
||||||
|
flag3 = sbflag.ToString();
|
||||||
}
|
}
|
||||||
ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(type3, indexes3, dr, 0, _util).Value);
|
ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, dr, 0, _util).Value);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}, cmdType, cmdText, cmdParms);
|
}, cmdType, cmdText, cmdParms);
|
||||||
@ -204,60 +240,84 @@ namespace FreeSql.Internal.CommonProvider {
|
|||||||
if (string.IsNullOrEmpty(cmdText)) return (new List<T1>(), new List<T2>(), new List<T3>(), new List<T4>());
|
if (string.IsNullOrEmpty(cmdText)) return (new List<T1>(), new List<T2>(), new List<T3>(), new List<T4>());
|
||||||
var ret1 = new List<T1>();
|
var ret1 = new List<T1>();
|
||||||
var type1 = typeof(T1);
|
var type1 = typeof(T1);
|
||||||
|
string flag1 = null;
|
||||||
int[] indexes1 = null;
|
int[] indexes1 = null;
|
||||||
var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties());
|
var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties());
|
||||||
|
|
||||||
var ret2 = new List<T2>();
|
var ret2 = new List<T2>();
|
||||||
var type2 = typeof(T2);
|
var type2 = typeof(T2);
|
||||||
|
string flag2 = null;
|
||||||
int[] indexes2 = null;
|
int[] indexes2 = null;
|
||||||
var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties());
|
var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties());
|
||||||
|
|
||||||
var ret3 = new List<T3>();
|
var ret3 = new List<T3>();
|
||||||
var type3 = typeof(T3);
|
var type3 = typeof(T3);
|
||||||
|
string flag3 = null;
|
||||||
int[] indexes3 = null;
|
int[] indexes3 = null;
|
||||||
var props3 = dicQueryTypeGetProperties.GetOrAdd(type3, k => type1.GetProperties());
|
var props3 = dicQueryTypeGetProperties.GetOrAdd(type3, k => type1.GetProperties());
|
||||||
|
|
||||||
var ret4 = new List<T4>();
|
var ret4 = new List<T4>();
|
||||||
var type4 = typeof(T4);
|
var type4 = typeof(T4);
|
||||||
|
string flag4 = null;
|
||||||
int[] indexes4 = null;
|
int[] indexes4 = null;
|
||||||
var props4 = dicQueryTypeGetProperties.GetOrAdd(type4, k => type1.GetProperties());
|
var props4 = dicQueryTypeGetProperties.GetOrAdd(type4, k => type1.GetProperties());
|
||||||
ExecuteReaderMultiple(4, connection, transaction, (dr, result) => {
|
ExecuteReaderMultiple(4, connection, transaction, (dr, result) => {
|
||||||
switch (result) {
|
switch (result) {
|
||||||
case 0:
|
case 0:
|
||||||
if (indexes1 == null) {
|
if (indexes1 == null) {
|
||||||
|
var sbflag = new StringBuilder().Append("query");
|
||||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
for (var a = 0; a < dr.FieldCount; a++)
|
for (var a = 0; a < dr.FieldCount; a++) {
|
||||||
dic.Add(dr.GetName(a), a);
|
var name = dr.GetName(a);
|
||||||
|
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.Name, out var tryint) ? tryint : -1).ToArray();
|
||||||
|
flag1 = sbflag.ToString();
|
||||||
}
|
}
|
||||||
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(type1, indexes1, dr, 0, _util).Value);
|
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
if (indexes2 == null) {
|
if (indexes2 == null) {
|
||||||
|
var sbflag = new StringBuilder().Append("query");
|
||||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
for (var a = 0; a < dr.FieldCount; a++)
|
for (var a = 0; a < dr.FieldCount; a++) {
|
||||||
dic.Add(dr.GetName(a), a);
|
var name = dr.GetName(a);
|
||||||
|
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.Name, out var tryint) ? tryint : -1).ToArray();
|
||||||
|
flag2 = sbflag.ToString();
|
||||||
}
|
}
|
||||||
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(type2, indexes2, dr, 0, _util).Value);
|
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if (indexes3 == null) {
|
if (indexes3 == null) {
|
||||||
|
var sbflag = new StringBuilder().Append("query");
|
||||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
for (var a = 0; a < dr.FieldCount; a++)
|
for (var a = 0; a < dr.FieldCount; a++) {
|
||||||
dic.Add(dr.GetName(a), a);
|
var name = dr.GetName(a);
|
||||||
|
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.Name, out var tryint) ? tryint : -1).ToArray();
|
||||||
|
flag3 = sbflag.ToString();
|
||||||
}
|
}
|
||||||
ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(type3, indexes3, dr, 0, _util).Value);
|
ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, dr, 0, _util).Value);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
if (indexes4 == null) {
|
if (indexes4 == null) {
|
||||||
|
var sbflag = new StringBuilder().Append("query");
|
||||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
for (var a = 0; a < dr.FieldCount; a++)
|
for (var a = 0; a < dr.FieldCount; a++) {
|
||||||
dic.Add(dr.GetName(a), a);
|
var name = dr.GetName(a);
|
||||||
|
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.Name, out var tryint) ? tryint : -1).ToArray();
|
||||||
|
flag4 = sbflag.ToString();
|
||||||
}
|
}
|
||||||
ret4.Add((T4)Utils.ExecuteArrayRowReadClassOrTuple(type4, indexes4, dr, 0, _util).Value);
|
ret4.Add((T4)Utils.ExecuteArrayRowReadClassOrTuple(flag4, type4, indexes4, dr, 0, _util).Value);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}, cmdType, cmdText, cmdParms);
|
}, cmdType, cmdText, cmdParms);
|
||||||
@ -273,74 +333,104 @@ namespace FreeSql.Internal.CommonProvider {
|
|||||||
if (string.IsNullOrEmpty(cmdText)) return (new List<T1>(), new List<T2>(), new List<T3>(), new List<T4>(), new List<T5>());
|
if (string.IsNullOrEmpty(cmdText)) return (new List<T1>(), new List<T2>(), new List<T3>(), new List<T4>(), new List<T5>());
|
||||||
var ret1 = new List<T1>();
|
var ret1 = new List<T1>();
|
||||||
var type1 = typeof(T1);
|
var type1 = typeof(T1);
|
||||||
|
string flag1 = null;
|
||||||
int[] indexes1 = null;
|
int[] indexes1 = null;
|
||||||
var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties());
|
var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties());
|
||||||
|
|
||||||
var ret2 = new List<T2>();
|
var ret2 = new List<T2>();
|
||||||
var type2 = typeof(T2);
|
var type2 = typeof(T2);
|
||||||
|
string flag2 = null;
|
||||||
int[] indexes2 = null;
|
int[] indexes2 = null;
|
||||||
var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties());
|
var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties());
|
||||||
|
|
||||||
var ret3 = new List<T3>();
|
var ret3 = new List<T3>();
|
||||||
var type3 = typeof(T3);
|
var type3 = typeof(T3);
|
||||||
|
string flag3 = null;
|
||||||
int[] indexes3 = null;
|
int[] indexes3 = null;
|
||||||
var props3 = dicQueryTypeGetProperties.GetOrAdd(type3, k => type1.GetProperties());
|
var props3 = dicQueryTypeGetProperties.GetOrAdd(type3, k => type1.GetProperties());
|
||||||
|
|
||||||
var ret4 = new List<T4>();
|
var ret4 = new List<T4>();
|
||||||
var type4 = typeof(T4);
|
var type4 = typeof(T4);
|
||||||
|
string flag4 = null;
|
||||||
int[] indexes4 = null;
|
int[] indexes4 = null;
|
||||||
var props4 = dicQueryTypeGetProperties.GetOrAdd(type4, k => type1.GetProperties());
|
var props4 = dicQueryTypeGetProperties.GetOrAdd(type4, k => type1.GetProperties());
|
||||||
|
|
||||||
var ret5 = new List<T5>();
|
var ret5 = new List<T5>();
|
||||||
var type5 = typeof(T5);
|
var type5 = typeof(T5);
|
||||||
|
string flag5 = null;
|
||||||
int[] indexes5 = null;
|
int[] indexes5 = null;
|
||||||
var props5 = dicQueryTypeGetProperties.GetOrAdd(type5, k => type1.GetProperties());
|
var props5 = dicQueryTypeGetProperties.GetOrAdd(type5, k => type1.GetProperties());
|
||||||
ExecuteReaderMultiple(5, connection, transaction, (dr, result) => {
|
ExecuteReaderMultiple(5, connection, transaction, (dr, result) => {
|
||||||
switch (result) {
|
switch (result) {
|
||||||
case 0:
|
case 0:
|
||||||
if (indexes1 == null) {
|
if (indexes1 == null) {
|
||||||
|
var sbflag = new StringBuilder().Append("query");
|
||||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
for (var a = 0; a < dr.FieldCount; a++)
|
for (var a = 0; a < dr.FieldCount; a++) {
|
||||||
dic.Add(dr.GetName(a), a);
|
var name = dr.GetName(a);
|
||||||
|
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.Name, out var tryint) ? tryint : -1).ToArray();
|
||||||
|
flag1 = sbflag.ToString();
|
||||||
}
|
}
|
||||||
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(type1, indexes1, dr, 0, _util).Value);
|
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
if (indexes2 == null) {
|
if (indexes2 == null) {
|
||||||
|
var sbflag = new StringBuilder().Append("query");
|
||||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
for (var a = 0; a < dr.FieldCount; a++)
|
for (var a = 0; a < dr.FieldCount; a++) {
|
||||||
dic.Add(dr.GetName(a), a);
|
var name = dr.GetName(a);
|
||||||
|
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.Name, out var tryint) ? tryint : -1).ToArray();
|
||||||
|
flag2 = sbflag.ToString();
|
||||||
}
|
}
|
||||||
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(type2, indexes2, dr, 0, _util).Value);
|
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if (indexes3 == null) {
|
if (indexes3 == null) {
|
||||||
|
var sbflag = new StringBuilder().Append("query");
|
||||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
for (var a = 0; a < dr.FieldCount; a++)
|
for (var a = 0; a < dr.FieldCount; a++) {
|
||||||
dic.Add(dr.GetName(a), a);
|
var name = dr.GetName(a);
|
||||||
|
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.Name, out var tryint) ? tryint : -1).ToArray();
|
||||||
|
flag3 = sbflag.ToString();
|
||||||
}
|
}
|
||||||
ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(type3, indexes3, dr, 0, _util).Value);
|
ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, dr, 0, _util).Value);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
if (indexes4 == null) {
|
if (indexes4 == null) {
|
||||||
|
var sbflag = new StringBuilder().Append("query");
|
||||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
for (var a = 0; a < dr.FieldCount; a++)
|
for (var a = 0; a < dr.FieldCount; a++) {
|
||||||
dic.Add(dr.GetName(a), a);
|
var name = dr.GetName(a);
|
||||||
|
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.Name, out var tryint) ? tryint : -1).ToArray();
|
||||||
|
flag4 = sbflag.ToString();
|
||||||
}
|
}
|
||||||
ret4.Add((T4)Utils.ExecuteArrayRowReadClassOrTuple(type4, indexes4, dr, 0, _util).Value);
|
ret4.Add((T4)Utils.ExecuteArrayRowReadClassOrTuple(flag4, type4, indexes4, dr, 0, _util).Value);
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
if (indexes5 == null) {
|
if (indexes5 == null) {
|
||||||
|
var sbflag = new StringBuilder().Append("query");
|
||||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
for (var a = 0; a < dr.FieldCount; a++)
|
for (var a = 0; a < dr.FieldCount; a++) {
|
||||||
dic.Add(dr.GetName(a), a);
|
var name = dr.GetName(a);
|
||||||
|
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.Name, out var tryint) ? tryint : -1).ToArray();
|
||||||
|
flag5 = sbflag.ToString();
|
||||||
}
|
}
|
||||||
ret5.Add((T5)Utils.ExecuteArrayRowReadClassOrTuple(type5, indexes5, dr, 0, _util).Value);
|
ret5.Add((T5)Utils.ExecuteArrayRowReadClassOrTuple(flag5, type5, indexes5, dr, 0, _util).Value);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}, cmdType, cmdText, cmdParms);
|
}, cmdType, cmdText, cmdParms);
|
||||||
|
@ -18,16 +18,22 @@ namespace FreeSql.Internal.CommonProvider {
|
|||||||
var ret = new List<T>();
|
var ret = new List<T>();
|
||||||
if (string.IsNullOrEmpty(cmdText)) return ret;
|
if (string.IsNullOrEmpty(cmdText)) return ret;
|
||||||
var type = typeof(T);
|
var type = typeof(T);
|
||||||
|
string flag = null;
|
||||||
int[] indexes = null;
|
int[] indexes = null;
|
||||||
var props = dicQueryTypeGetProperties.GetOrAdd(type, k => type.GetProperties());
|
var props = dicQueryTypeGetProperties.GetOrAdd(type, k => type.GetProperties());
|
||||||
await ExecuteReaderAsync(connection, transaction, dr => {
|
await ExecuteReaderAsync(connection, transaction, dr => {
|
||||||
if (indexes == null) {
|
if (indexes == null) {
|
||||||
|
var sbflag = new StringBuilder().Append("query");
|
||||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
for (var a = 0; a < dr.FieldCount; a++)
|
for (var a = 0; a < dr.FieldCount; a++) {
|
||||||
dic.Add(dr.GetName(a), a);
|
var name = dr.GetName(a);
|
||||||
|
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.Name, out var tryint) ? tryint : -1).ToArray();
|
||||||
|
flag = sbflag.ToString();
|
||||||
}
|
}
|
||||||
ret.Add((T)Utils.ExecuteArrayRowReadClassOrTuple(type, indexes, dr, 0, _util).Value);
|
ret.Add((T)Utils.ExecuteArrayRowReadClassOrTuple(flag, type, indexes, dr, 0, _util).Value);
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}, cmdType, cmdText, cmdParms);
|
}, cmdType, cmdText, cmdParms);
|
||||||
return ret;
|
return ret;
|
||||||
@ -42,32 +48,44 @@ namespace FreeSql.Internal.CommonProvider {
|
|||||||
if (string.IsNullOrEmpty(cmdText)) return (new List<T1>(), new List<T2>());
|
if (string.IsNullOrEmpty(cmdText)) return (new List<T1>(), new List<T2>());
|
||||||
var ret1 = new List<T1>();
|
var ret1 = new List<T1>();
|
||||||
var type1 = typeof(T1);
|
var type1 = typeof(T1);
|
||||||
|
string flag1 = null;
|
||||||
int[] indexes1 = null;
|
int[] indexes1 = null;
|
||||||
var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties());
|
var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties());
|
||||||
|
|
||||||
var ret2 = new List<T2>();
|
var ret2 = new List<T2>();
|
||||||
var type2 = typeof(T2);
|
var type2 = typeof(T2);
|
||||||
|
string flag2 = null;
|
||||||
int[] indexes2 = null;
|
int[] indexes2 = null;
|
||||||
var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties());
|
var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties());
|
||||||
await ExecuteReaderMultipleAsync(2, connection, transaction, (dr, result) => {
|
await ExecuteReaderMultipleAsync(2, connection, transaction, (dr, result) => {
|
||||||
switch (result) {
|
switch (result) {
|
||||||
case 0:
|
case 0:
|
||||||
if (indexes1 == null) {
|
if (indexes1 == null) {
|
||||||
|
var sbflag = new StringBuilder().Append("QueryAsync");
|
||||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
for (var a = 0; a < dr.FieldCount; a++)
|
for (var a = 0; a < dr.FieldCount; a++) {
|
||||||
dic.Add(dr.GetName(a), a);
|
var name = dr.GetName(a);
|
||||||
|
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.Name, out var tryint) ? tryint : -1).ToArray();
|
||||||
|
flag1 = sbflag.ToString();
|
||||||
}
|
}
|
||||||
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(type1, indexes1, dr, 0, _util).Value);
|
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
if (indexes2 == null) {
|
if (indexes2 == null) {
|
||||||
|
var sbflag = new StringBuilder().Append("QueryAsync");
|
||||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
for (var a = 0; a < dr.FieldCount; a++)
|
for (var a = 0; a < dr.FieldCount; a++) {
|
||||||
dic.Add(dr.GetName(a), a);
|
var name = dr.GetName(a);
|
||||||
|
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.Name, out var tryint) ? tryint : -1).ToArray();
|
||||||
|
flag2 = sbflag.ToString();
|
||||||
}
|
}
|
||||||
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(type2, indexes2, dr, 0, _util).Value);
|
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
@ -84,46 +102,64 @@ namespace FreeSql.Internal.CommonProvider {
|
|||||||
if (string.IsNullOrEmpty(cmdText)) return (new List<T1>(), new List<T2>(), new List<T3>());
|
if (string.IsNullOrEmpty(cmdText)) return (new List<T1>(), new List<T2>(), new List<T3>());
|
||||||
var ret1 = new List<T1>();
|
var ret1 = new List<T1>();
|
||||||
var type1 = typeof(T1);
|
var type1 = typeof(T1);
|
||||||
|
string flag1 = null;
|
||||||
int[] indexes1 = null;
|
int[] indexes1 = null;
|
||||||
var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties());
|
var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties());
|
||||||
|
|
||||||
var ret2 = new List<T2>();
|
var ret2 = new List<T2>();
|
||||||
var type2 = typeof(T2);
|
var type2 = typeof(T2);
|
||||||
|
string flag2 = null;
|
||||||
int[] indexes2 = null;
|
int[] indexes2 = null;
|
||||||
var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties());
|
var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties());
|
||||||
|
|
||||||
var ret3 = new List<T3>();
|
var ret3 = new List<T3>();
|
||||||
var type3 = typeof(T3);
|
var type3 = typeof(T3);
|
||||||
|
string flag3 = null;
|
||||||
int[] indexes3 = null;
|
int[] indexes3 = null;
|
||||||
var props3 = dicQueryTypeGetProperties.GetOrAdd(type3, k => type1.GetProperties());
|
var props3 = dicQueryTypeGetProperties.GetOrAdd(type3, k => type1.GetProperties());
|
||||||
await ExecuteReaderMultipleAsync(3, connection, transaction, (dr, result) => {
|
await ExecuteReaderMultipleAsync(3, connection, transaction, (dr, result) => {
|
||||||
switch (result) {
|
switch (result) {
|
||||||
case 0:
|
case 0:
|
||||||
if (indexes1 == null) {
|
if (indexes1 == null) {
|
||||||
|
var sbflag = new StringBuilder().Append("QueryAsync");
|
||||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
for (var a = 0; a < dr.FieldCount; a++)
|
for (var a = 0; a < dr.FieldCount; a++) {
|
||||||
dic.Add(dr.GetName(a), a);
|
var name = dr.GetName(a);
|
||||||
|
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.Name, out var tryint) ? tryint : -1).ToArray();
|
||||||
|
flag1 = sbflag.ToString();
|
||||||
}
|
}
|
||||||
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(type1, indexes1, dr, 0, _util).Value);
|
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
if (indexes2 == null) {
|
if (indexes2 == null) {
|
||||||
|
var sbflag = new StringBuilder().Append("QueryAsync");
|
||||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
for (var a = 0; a < dr.FieldCount; a++)
|
for (var a = 0; a < dr.FieldCount; a++) {
|
||||||
dic.Add(dr.GetName(a), a);
|
var name = dr.GetName(a);
|
||||||
|
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.Name, out var tryint) ? tryint : -1).ToArray();
|
||||||
|
flag2 = sbflag.ToString();
|
||||||
}
|
}
|
||||||
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(type2, indexes2, dr, 0, _util).Value);
|
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if (indexes3 == null) {
|
if (indexes3 == null) {
|
||||||
|
var sbflag = new StringBuilder().Append("QueryAsync");
|
||||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
for (var a = 0; a < dr.FieldCount; a++)
|
for (var a = 0; a < dr.FieldCount; a++) {
|
||||||
dic.Add(dr.GetName(a), a);
|
var name = dr.GetName(a);
|
||||||
|
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.Name, out var tryint) ? tryint : -1).ToArray();
|
||||||
|
flag3 = sbflag.ToString();
|
||||||
}
|
}
|
||||||
ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(type3, indexes3, dr, 0, _util).Value);
|
ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, dr, 0, _util).Value);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
@ -140,60 +176,84 @@ namespace FreeSql.Internal.CommonProvider {
|
|||||||
if (string.IsNullOrEmpty(cmdText)) return (new List<T1>(), new List<T2>(), new List<T3>(), new List<T4>());
|
if (string.IsNullOrEmpty(cmdText)) return (new List<T1>(), new List<T2>(), new List<T3>(), new List<T4>());
|
||||||
var ret1 = new List<T1>();
|
var ret1 = new List<T1>();
|
||||||
var type1 = typeof(T1);
|
var type1 = typeof(T1);
|
||||||
|
string flag1 = null;
|
||||||
int[] indexes1 = null;
|
int[] indexes1 = null;
|
||||||
var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties());
|
var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties());
|
||||||
|
|
||||||
var ret2 = new List<T2>();
|
var ret2 = new List<T2>();
|
||||||
var type2 = typeof(T2);
|
var type2 = typeof(T2);
|
||||||
|
string flag2 = null;
|
||||||
int[] indexes2 = null;
|
int[] indexes2 = null;
|
||||||
var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties());
|
var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties());
|
||||||
|
|
||||||
var ret3 = new List<T3>();
|
var ret3 = new List<T3>();
|
||||||
var type3 = typeof(T3);
|
var type3 = typeof(T3);
|
||||||
|
string flag3 = null;
|
||||||
int[] indexes3 = null;
|
int[] indexes3 = null;
|
||||||
var props3 = dicQueryTypeGetProperties.GetOrAdd(type3, k => type1.GetProperties());
|
var props3 = dicQueryTypeGetProperties.GetOrAdd(type3, k => type1.GetProperties());
|
||||||
|
|
||||||
var ret4 = new List<T4>();
|
var ret4 = new List<T4>();
|
||||||
var type4 = typeof(T4);
|
var type4 = typeof(T4);
|
||||||
|
string flag4 = null;
|
||||||
int[] indexes4 = null;
|
int[] indexes4 = null;
|
||||||
var props4 = dicQueryTypeGetProperties.GetOrAdd(type4, k => type1.GetProperties());
|
var props4 = dicQueryTypeGetProperties.GetOrAdd(type4, k => type1.GetProperties());
|
||||||
await ExecuteReaderMultipleAsync(4, connection, transaction, (dr, result) => {
|
await ExecuteReaderMultipleAsync(4, connection, transaction, (dr, result) => {
|
||||||
switch (result) {
|
switch (result) {
|
||||||
case 0:
|
case 0:
|
||||||
if (indexes1 == null) {
|
if (indexes1 == null) {
|
||||||
|
var sbflag = new StringBuilder().Append("QueryAsync");
|
||||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
for (var a = 0; a < dr.FieldCount; a++)
|
for (var a = 0; a < dr.FieldCount; a++) {
|
||||||
dic.Add(dr.GetName(a), a);
|
var name = dr.GetName(a);
|
||||||
|
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.Name, out var tryint) ? tryint : -1).ToArray();
|
||||||
|
flag1 = sbflag.ToString();
|
||||||
}
|
}
|
||||||
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(type1, indexes1, dr, 0, _util).Value);
|
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
if (indexes2 == null) {
|
if (indexes2 == null) {
|
||||||
|
var sbflag = new StringBuilder().Append("QueryAsync");
|
||||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
for (var a = 0; a < dr.FieldCount; a++)
|
for (var a = 0; a < dr.FieldCount; a++) {
|
||||||
dic.Add(dr.GetName(a), a);
|
var name = dr.GetName(a);
|
||||||
|
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.Name, out var tryint) ? tryint : -1).ToArray();
|
||||||
|
flag2 = sbflag.ToString();
|
||||||
}
|
}
|
||||||
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(type2, indexes2, dr, 0, _util).Value);
|
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if (indexes3 == null) {
|
if (indexes3 == null) {
|
||||||
|
var sbflag = new StringBuilder().Append("QueryAsync");
|
||||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
for (var a = 0; a < dr.FieldCount; a++)
|
for (var a = 0; a < dr.FieldCount; a++) {
|
||||||
dic.Add(dr.GetName(a), a);
|
var name = dr.GetName(a);
|
||||||
|
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.Name, out var tryint) ? tryint : -1).ToArray();
|
||||||
|
flag3 = sbflag.ToString();
|
||||||
}
|
}
|
||||||
ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(type3, indexes3, dr, 0, _util).Value);
|
ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, dr, 0, _util).Value);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
if (indexes4 == null) {
|
if (indexes4 == null) {
|
||||||
|
var sbflag = new StringBuilder().Append("QueryAsync");
|
||||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
for (var a = 0; a < dr.FieldCount; a++)
|
for (var a = 0; a < dr.FieldCount; a++) {
|
||||||
dic.Add(dr.GetName(a), a);
|
var name = dr.GetName(a);
|
||||||
|
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.Name, out var tryint) ? tryint : -1).ToArray();
|
||||||
|
flag4 = sbflag.ToString();
|
||||||
}
|
}
|
||||||
ret4.Add((T4)Utils.ExecuteArrayRowReadClassOrTuple(type4, indexes4, dr, 0, _util).Value);
|
ret4.Add((T4)Utils.ExecuteArrayRowReadClassOrTuple(flag4, type4, indexes4, dr, 0, _util).Value);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
@ -210,74 +270,104 @@ namespace FreeSql.Internal.CommonProvider {
|
|||||||
if (string.IsNullOrEmpty(cmdText)) return (new List<T1>(), new List<T2>(), new List<T3>(), new List<T4>(), new List<T5>());
|
if (string.IsNullOrEmpty(cmdText)) return (new List<T1>(), new List<T2>(), new List<T3>(), new List<T4>(), new List<T5>());
|
||||||
var ret1 = new List<T1>();
|
var ret1 = new List<T1>();
|
||||||
var type1 = typeof(T1);
|
var type1 = typeof(T1);
|
||||||
|
string flag1 = null;
|
||||||
int[] indexes1 = null;
|
int[] indexes1 = null;
|
||||||
var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties());
|
var props1 = dicQueryTypeGetProperties.GetOrAdd(type1, k => type1.GetProperties());
|
||||||
|
|
||||||
var ret2 = new List<T2>();
|
var ret2 = new List<T2>();
|
||||||
var type2 = typeof(T2);
|
var type2 = typeof(T2);
|
||||||
|
string flag2 = null;
|
||||||
int[] indexes2 = null;
|
int[] indexes2 = null;
|
||||||
var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties());
|
var props2 = dicQueryTypeGetProperties.GetOrAdd(type2, k => type1.GetProperties());
|
||||||
|
|
||||||
var ret3 = new List<T3>();
|
var ret3 = new List<T3>();
|
||||||
var type3 = typeof(T3);
|
var type3 = typeof(T3);
|
||||||
|
string flag3 = null;
|
||||||
int[] indexes3 = null;
|
int[] indexes3 = null;
|
||||||
var props3 = dicQueryTypeGetProperties.GetOrAdd(type3, k => type1.GetProperties());
|
var props3 = dicQueryTypeGetProperties.GetOrAdd(type3, k => type1.GetProperties());
|
||||||
|
|
||||||
var ret4 = new List<T4>();
|
var ret4 = new List<T4>();
|
||||||
var type4 = typeof(T4);
|
var type4 = typeof(T4);
|
||||||
|
string flag4 = null;
|
||||||
int[] indexes4 = null;
|
int[] indexes4 = null;
|
||||||
var props4 = dicQueryTypeGetProperties.GetOrAdd(type4, k => type1.GetProperties());
|
var props4 = dicQueryTypeGetProperties.GetOrAdd(type4, k => type1.GetProperties());
|
||||||
|
|
||||||
var ret5 = new List<T5>();
|
var ret5 = new List<T5>();
|
||||||
var type5 = typeof(T5);
|
var type5 = typeof(T5);
|
||||||
|
string flag5 = null;
|
||||||
int[] indexes5 = null;
|
int[] indexes5 = null;
|
||||||
var props5 = dicQueryTypeGetProperties.GetOrAdd(type5, k => type1.GetProperties());
|
var props5 = dicQueryTypeGetProperties.GetOrAdd(type5, k => type1.GetProperties());
|
||||||
await ExecuteReaderMultipleAsync(5, connection, transaction, (dr, result) => {
|
await ExecuteReaderMultipleAsync(5, connection, transaction, (dr, result) => {
|
||||||
switch (result) {
|
switch (result) {
|
||||||
case 0:
|
case 0:
|
||||||
if (indexes1 == null) {
|
if (indexes1 == null) {
|
||||||
|
var sbflag = new StringBuilder().Append("QueryAsync");
|
||||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
for (var a = 0; a < dr.FieldCount; a++)
|
for (var a = 0; a < dr.FieldCount; a++) {
|
||||||
dic.Add(dr.GetName(a), a);
|
var name = dr.GetName(a);
|
||||||
|
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.Name, out var tryint) ? tryint : -1).ToArray();
|
||||||
|
flag1 = sbflag.ToString();
|
||||||
}
|
}
|
||||||
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(type1, indexes1, dr, 0, _util).Value);
|
ret1.Add((T1)Utils.ExecuteArrayRowReadClassOrTuple(flag1, type1, indexes1, dr, 0, _util).Value);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
if (indexes2 == null) {
|
if (indexes2 == null) {
|
||||||
|
var sbflag = new StringBuilder().Append("QueryAsync");
|
||||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
for (var a = 0; a < dr.FieldCount; a++)
|
for (var a = 0; a < dr.FieldCount; a++) {
|
||||||
dic.Add(dr.GetName(a), a);
|
var name = dr.GetName(a);
|
||||||
|
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.Name, out var tryint) ? tryint : -1).ToArray();
|
||||||
|
flag2 = sbflag.ToString();
|
||||||
}
|
}
|
||||||
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(type2, indexes2, dr, 0, _util).Value);
|
ret2.Add((T2)Utils.ExecuteArrayRowReadClassOrTuple(flag2, type2, indexes2, dr, 0, _util).Value);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if (indexes3 == null) {
|
if (indexes3 == null) {
|
||||||
|
var sbflag = new StringBuilder().Append("QueryAsync");
|
||||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
for (var a = 0; a < dr.FieldCount; a++)
|
for (var a = 0; a < dr.FieldCount; a++) {
|
||||||
dic.Add(dr.GetName(a), a);
|
var name = dr.GetName(a);
|
||||||
|
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.Name, out var tryint) ? tryint : -1).ToArray();
|
||||||
|
flag3 = sbflag.ToString();
|
||||||
}
|
}
|
||||||
ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(type3, indexes3, dr, 0, _util).Value);
|
ret3.Add((T3)Utils.ExecuteArrayRowReadClassOrTuple(flag3, type3, indexes3, dr, 0, _util).Value);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
if (indexes4 == null) {
|
if (indexes4 == null) {
|
||||||
|
var sbflag = new StringBuilder().Append("QueryAsync");
|
||||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
for (var a = 0; a < dr.FieldCount; a++)
|
for (var a = 0; a < dr.FieldCount; a++) {
|
||||||
dic.Add(dr.GetName(a), a);
|
var name = dr.GetName(a);
|
||||||
|
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.Name, out var tryint) ? tryint : -1).ToArray();
|
||||||
|
flag4 = sbflag.ToString();
|
||||||
}
|
}
|
||||||
ret4.Add((T4)Utils.ExecuteArrayRowReadClassOrTuple(type4, indexes4, dr, 0, _util).Value);
|
ret4.Add((T4)Utils.ExecuteArrayRowReadClassOrTuple(flag4, type4, indexes4, dr, 0, _util).Value);
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
if (indexes5 == null) {
|
if (indexes5 == null) {
|
||||||
|
var sbflag = new StringBuilder().Append("QueryAsync");
|
||||||
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
|
||||||
for (var a = 0; a < dr.FieldCount; a++)
|
for (var a = 0; a < dr.FieldCount; a++) {
|
||||||
dic.Add(dr.GetName(a), a);
|
var name = dr.GetName(a);
|
||||||
|
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.Name, out var tryint) ? tryint : -1).ToArray();
|
||||||
|
flag5 = sbflag.ToString();
|
||||||
}
|
}
|
||||||
ret5.Add((T5)Utils.ExecuteArrayRowReadClassOrTuple(type5, indexes5, dr, 0, _util).Value);
|
ret5.Add((T5)Utils.ExecuteArrayRowReadClassOrTuple(flag5, type5, indexes5, dr, 0, _util).Value);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
|
@ -273,10 +273,11 @@ namespace FreeSql.Internal.CommonProvider {
|
|||||||
var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, Aop.CurdType.Select, sql, dbParms);
|
var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, Aop.CurdType.Select, sql, dbParms);
|
||||||
_orm.Aop.CurdBefore?.Invoke(this, before);
|
_orm.Aop.CurdBefore?.Invoke(this, before);
|
||||||
var ret = new List<TTuple>();
|
var ret = new List<TTuple>();
|
||||||
|
var flagStr = $"ToListField:{field}";
|
||||||
Exception exception = null;
|
Exception exception = null;
|
||||||
try {
|
try {
|
||||||
_orm.Ado.ExecuteReader(_connection, _transaction, dr => {
|
_orm.Ado.ExecuteReader(_connection, _transaction, dr => {
|
||||||
var read = Utils.ExecuteArrayRowReadClassOrTuple(type, null, dr, 0, _commonUtils);
|
var read = Utils.ExecuteArrayRowReadClassOrTuple(flagStr, type, null, dr, 0, _commonUtils);
|
||||||
ret.Add((TTuple)read.Value);
|
ret.Add((TTuple)read.Value);
|
||||||
}, CommandType.Text, sql, dbParms);
|
}, CommandType.Text, sql, dbParms);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
@ -299,10 +300,11 @@ namespace FreeSql.Internal.CommonProvider {
|
|||||||
var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, Aop.CurdType.Select, sql, dbParms);
|
var before = new Aop.CurdBeforeEventArgs(_tables[0].Table.Type, Aop.CurdType.Select, sql, dbParms);
|
||||||
_orm.Aop.CurdBefore?.Invoke(this, before);
|
_orm.Aop.CurdBefore?.Invoke(this, before);
|
||||||
var ret = new List<TTuple>();
|
var ret = new List<TTuple>();
|
||||||
|
var flagStr = $"ToListField:{field}";
|
||||||
Exception exception = null;
|
Exception exception = null;
|
||||||
try {
|
try {
|
||||||
await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, dr => {
|
await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, dr => {
|
||||||
var read = Utils.ExecuteArrayRowReadClassOrTuple(type, null, dr, 0, _commonUtils);
|
var read = Utils.ExecuteArrayRowReadClassOrTuple(flagStr, type, null, dr, 0, _commonUtils);
|
||||||
ret.Add((TTuple)read.Value);
|
ret.Add((TTuple)read.Value);
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}, CommandType.Text, sql, dbParms);
|
}, CommandType.Text, sql, dbParms);
|
||||||
@ -537,7 +539,7 @@ namespace FreeSql.Internal.CommonProvider {
|
|||||||
|
|
||||||
if (tbiindex == 0)
|
if (tbiindex == 0)
|
||||||
blockExp.AddRange(new Expression[] {
|
blockExp.AddRange(new Expression[] {
|
||||||
Expression.Assign(readExp, Expression.Call(Utils.MethodExecuteArrayRowReadClassOrTuple, new Expression[] { Expression.Constant(typei), Expression.Constant(null, typeof(int[])), rowExp, dataIndexExp, Expression.Constant(_commonUtils) })),
|
Expression.Assign(readExp, Expression.Call(Utils.MethodExecuteArrayRowReadClassOrTuple, new Expression[] { Expression.Constant(null, typeof(string)), Expression.Constant(typei), Expression.Constant(null, typeof(int[])), rowExp, dataIndexExp, Expression.Constant(_commonUtils) })),
|
||||||
Expression.IfThen(
|
Expression.IfThen(
|
||||||
Expression.GreaterThan(readExpDataIndex, dataIndexExp),
|
Expression.GreaterThan(readExpDataIndex, dataIndexExp),
|
||||||
Expression.Assign(dataIndexExp, readExpDataIndex)
|
Expression.Assign(dataIndexExp, readExpDataIndex)
|
||||||
@ -577,7 +579,7 @@ namespace FreeSql.Internal.CommonProvider {
|
|||||||
Expression.IfThenElse(
|
Expression.IfThenElse(
|
||||||
curExpIfNotNull,
|
curExpIfNotNull,
|
||||||
Expression.Block(new Expression[] {
|
Expression.Block(new Expression[] {
|
||||||
Expression.Assign(readExp, Expression.Call(Utils.MethodExecuteArrayRowReadClassOrTuple, new Expression[] { Expression.Constant(typei), Expression.Constant(null, typeof(int[])), rowExp, dataIndexExp, Expression.Constant(_commonUtils) })),
|
Expression.Assign(readExp, Expression.Call(Utils.MethodExecuteArrayRowReadClassOrTuple, new Expression[] { Expression.Constant(null, typeof(string)), Expression.Constant(typei), Expression.Constant(null, typeof(int[])), rowExp, dataIndexExp, Expression.Constant(_commonUtils) })),
|
||||||
Expression.IfThen(
|
Expression.IfThen(
|
||||||
Expression.GreaterThan(readExpDataIndex, dataIndexExp),
|
Expression.GreaterThan(readExpDataIndex, dataIndexExp),
|
||||||
Expression.Assign(dataIndexExp, readExpDataIndex)
|
Expression.Assign(dataIndexExp, readExpDataIndex)
|
||||||
@ -694,7 +696,7 @@ namespace FreeSql.Internal.CommonProvider {
|
|||||||
Expression.Add(dataIndexExp, Expression.Constant(1))
|
Expression.Add(dataIndexExp, Expression.Constant(1))
|
||||||
);
|
);
|
||||||
else {
|
else {
|
||||||
readExpAssign = Expression.Call(Utils.MethodExecuteArrayRowReadClassOrTuple, new Expression[] { Expression.Constant(prop.PropertyType), Expression.Constant(null, typeof(int[])), rowExp, dataIndexExp, Expression.Constant(_commonUtils) });
|
readExpAssign = Expression.Call(Utils.MethodExecuteArrayRowReadClassOrTuple, new Expression[] { Expression.Constant(null, typeof(string)), Expression.Constant(prop.PropertyType), Expression.Constant(null, typeof(int[])), rowExp, dataIndexExp, Expression.Constant(_commonUtils) });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
blockExp.AddRange(new Expression[] {
|
blockExp.AddRange(new Expression[] {
|
||||||
@ -719,7 +721,7 @@ namespace FreeSql.Internal.CommonProvider {
|
|||||||
blockExp.Clear();
|
blockExp.Clear();
|
||||||
blockExp.AddRange(new Expression[] {
|
blockExp.AddRange(new Expression[] {
|
||||||
Expression.Assign(dataIndexExp, Expression.Constant(0)),
|
Expression.Assign(dataIndexExp, Expression.Constant(0)),
|
||||||
Expression.Assign(readExp, Expression.Call(Utils.MethodExecuteArrayRowReadClassOrTuple, new Expression[] { Expression.Constant(type), Expression.Constant(null, typeof(int[])), rowExp, dataIndexExp, Expression.Constant(_commonUtils) })),
|
Expression.Assign(readExp, Expression.Call(Utils.MethodExecuteArrayRowReadClassOrTuple, new Expression[] { Expression.Constant(null, typeof(string)), Expression.Constant(type), Expression.Constant(null, typeof(int[])), rowExp, dataIndexExp, Expression.Constant(_commonUtils) })),
|
||||||
Expression.IfThen(
|
Expression.IfThen(
|
||||||
Expression.NotEqual(readExpValue, Expression.Constant(null)),
|
Expression.NotEqual(readExpValue, Expression.Constant(null)),
|
||||||
Expression.Assign(retExp, Expression.Convert(readExpValue, type))
|
Expression.Assign(retExp, Expression.Convert(readExpValue, type))
|
||||||
|
@ -703,7 +703,7 @@ namespace FreeSql.Internal {
|
|||||||
//[typeof(JObject)] = true,
|
//[typeof(JObject)] = true,
|
||||||
//[typeof(JArray)] = true,
|
//[typeof(JArray)] = true,
|
||||||
};
|
};
|
||||||
internal static ConcurrentDictionary<Type, Func<Type, int[], DbDataReader, int, CommonUtils, RowInfo>> _dicExecuteArrayRowReadClassOrTuple = new ConcurrentDictionary<Type, Func<Type, int[], DbDataReader, int, CommonUtils, RowInfo>>();
|
internal static ConcurrentDictionary<string, ConcurrentDictionary<Type, Func<Type, int[], DbDataReader, int, CommonUtils, RowInfo>>> _dicExecuteArrayRowReadClassOrTuple = new ConcurrentDictionary<string, ConcurrentDictionary<Type, Func<Type, int[], DbDataReader, int, CommonUtils, RowInfo>>>();
|
||||||
internal class RowInfo {
|
internal class RowInfo {
|
||||||
public object Value { get; set; }
|
public object Value { get; set; }
|
||||||
public int DataIndex { get; set; }
|
public int DataIndex { get; set; }
|
||||||
@ -716,8 +716,11 @@ namespace FreeSql.Internal {
|
|||||||
public static PropertyInfo PropertyDataIndex = typeof(RowInfo).GetProperty("DataIndex");
|
public static PropertyInfo PropertyDataIndex = typeof(RowInfo).GetProperty("DataIndex");
|
||||||
}
|
}
|
||||||
internal static MethodInfo MethodDataReaderGetValue = typeof(DbDataReader).GetMethod("GetValue");
|
internal static MethodInfo MethodDataReaderGetValue = typeof(DbDataReader).GetMethod("GetValue");
|
||||||
internal static RowInfo ExecuteArrayRowReadClassOrTuple(Type typeOrg, int[] indexes, DbDataReader row, int dataIndex, CommonUtils _commonUtils) {
|
internal static RowInfo ExecuteArrayRowReadClassOrTuple(string flagStr, Type typeOrg, int[] indexes, DbDataReader row, int dataIndex, CommonUtils _commonUtils) {
|
||||||
var func = _dicExecuteArrayRowReadClassOrTuple.GetOrAdd(typeOrg, type => {
|
if (string.IsNullOrEmpty(flagStr)) flagStr = "all";
|
||||||
|
var func = _dicExecuteArrayRowReadClassOrTuple
|
||||||
|
.GetOrAdd(flagStr, flag => new ConcurrentDictionary<Type, Func<Type, int[], DbDataReader, int, CommonUtils, RowInfo>>())
|
||||||
|
.GetOrAdd(typeOrg, type => {
|
||||||
var returnTarget = Expression.Label(typeof(RowInfo));
|
var returnTarget = Expression.Label(typeof(RowInfo));
|
||||||
var typeExp = Expression.Parameter(typeof(Type), "type");
|
var typeExp = Expression.Parameter(typeof(Type), "type");
|
||||||
var indexesExp = Expression.Parameter(typeof(int[]), "indexes");
|
var indexesExp = Expression.Parameter(typeof(int[]), "indexes");
|
||||||
@ -770,7 +773,7 @@ namespace FreeSql.Internal {
|
|||||||
Expression.Add(dataIndexExp, Expression.Constant(1))
|
Expression.Add(dataIndexExp, Expression.Constant(1))
|
||||||
);
|
);
|
||||||
else {
|
else {
|
||||||
read2ExpAssign = Expression.Call(MethodExecuteArrayRowReadClassOrTuple, new Expression[] { Expression.Constant(field.FieldType), indexesExp, rowExp, dataIndexExp, commonUtilExp });
|
read2ExpAssign = Expression.Call(MethodExecuteArrayRowReadClassOrTuple, new Expression[] { Expression.Constant(flagStr), Expression.Constant(field.FieldType), indexesExp, rowExp, dataIndexExp, commonUtilExp });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
block2Exp.AddRange(new Expression[] {
|
block2Exp.AddRange(new Expression[] {
|
||||||
@ -887,7 +890,7 @@ namespace FreeSql.Internal {
|
|||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
readExpAssign = Expression.New(RowInfo.Constructor,
|
readExpAssign = Expression.New(RowInfo.Constructor,
|
||||||
Expression.MakeMemberAccess(Expression.Call(MethodExecuteArrayRowReadClassOrTuple, new Expression[] { Expression.Constant(readType), indexesExp, rowExp, dataIndexExp, commonUtilExp }), RowInfo.PropertyValue),
|
Expression.MakeMemberAccess(Expression.Call(MethodExecuteArrayRowReadClassOrTuple, new Expression[] { Expression.Constant(flagStr), Expression.Constant(readType), indexesExp, rowExp, dataIndexExp, commonUtilExp }), RowInfo.PropertyValue),
|
||||||
Expression.Add(dataIndexExp, Expression.Constant(1)));
|
Expression.Add(dataIndexExp, Expression.Constant(1)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -984,7 +987,7 @@ namespace FreeSql.Internal {
|
|||||||
} else {
|
} else {
|
||||||
++propIndex;
|
++propIndex;
|
||||||
continue;
|
continue;
|
||||||
//readExpAssign = Expression.Call(MethodExecuteArrayRowReadClassOrTuple, new Expression[] { Expression.Constant(readType), indexesExp, rowExp, tryidxExp });
|
//readExpAssign = Expression.Call(MethodExecuteArrayRowReadClassOrTuple, new Expression[] { Expression.Constant(flagStr), Expression.Constant(readType), indexesExp, rowExp, tryidxExp });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user