mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 18:52:50 +08:00
- 修复 IAdo.Query\<匿名类\>(sql) 错误;
This commit is contained in:
parent
ced9fbb476
commit
bf84bf0fcb
@ -532,14 +532,5 @@
|
|||||||
<param name="that"></param>
|
<param name="that"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])">
|
|
||||||
<summary>
|
|
||||||
批量注入 Repository,可以参考代码自行调整
|
|
||||||
</summary>
|
|
||||||
<param name="services"></param>
|
|
||||||
<param name="globalDataFilter"></param>
|
|
||||||
<param name="assemblies"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
</members>
|
</members>
|
||||||
</doc>
|
</doc>
|
||||||
|
@ -1463,7 +1463,7 @@ namespace FreeSql.Internal
|
|||||||
var name = row2.GetName(a);
|
var name = row2.GetName(a);
|
||||||
//expando[name] = row2.GetValue(a);
|
//expando[name] = row2.GetValue(a);
|
||||||
if (expandodic.ContainsKey(name)) continue;
|
if (expandodic.ContainsKey(name)) continue;
|
||||||
expandodic.Add(name, Utils.InternalDataReaderGetValue(_commonUtils, row2, a));
|
expandodic.Add(name, Utils.InternalDataReaderGetValue(commonUtils2, row2, a));
|
||||||
}
|
}
|
||||||
//expando = expandodic;
|
//expando = expandodic;
|
||||||
return new RowInfo(expandodic, fc);
|
return new RowInfo(expandodic, fc);
|
||||||
@ -1471,6 +1471,8 @@ namespace FreeSql.Internal
|
|||||||
return dynamicFunc;// Expression.Lambda<Func<Type, int[], DbDataReader, int, RowInfo>>(null);
|
return dynamicFunc;// Expression.Lambda<Func<Type, int[], DbDataReader, int, RowInfo>>(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (type.IsAnonymousType()) return ExecuteArrayRowReadAnonymousType;
|
||||||
|
|
||||||
//类注入属性
|
//类注入属性
|
||||||
var typetb = GetTableByEntity(type, _commonUtils);
|
var typetb = GetTableByEntity(type, _commonUtils);
|
||||||
var retExp = Expression.Variable(type, "ret");
|
var retExp = Expression.Variable(type, "ret");
|
||||||
@ -1596,12 +1598,13 @@ namespace FreeSql.Internal
|
|||||||
var propIndex = 0;
|
var propIndex = 0;
|
||||||
foreach (var prop in props)
|
foreach (var prop in props)
|
||||||
{
|
{
|
||||||
if (typetb.ColumnsByCsIgnore.ContainsKey(prop.Name))
|
if (typetb?.ColumnsByCsIgnore.ContainsKey(prop.Name) == true)
|
||||||
{
|
{
|
||||||
++propIndex;
|
++propIndex;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
var readType = typetb.ColumnsByCs.TryGetValue(prop.Name, out var trycol) ? trycol.Attribute.MapType : prop.PropertyType;
|
ColumnInfo trycol = null;
|
||||||
|
var readType = typetb?.ColumnsByCs.TryGetValue(prop.Name, out trycol) == true ? trycol.Attribute.MapType : prop.PropertyType;
|
||||||
|
|
||||||
var ispkExp = new List<Expression>();
|
var ispkExp = new List<Expression>();
|
||||||
var propGetSetMethod = prop.GetSetMethod(true);
|
var propGetSetMethod = prop.GetSetMethod(true);
|
||||||
@ -1700,6 +1703,18 @@ namespace FreeSql.Internal
|
|||||||
return func(typeOrg, indexes, row, dataIndex, _commonUtils);
|
return func(typeOrg, indexes, row, dataIndex, _commonUtils);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal static RowInfo ExecuteArrayRowReadAnonymousType(Type type2, int[] indexes2, DbDataReader row2, int dataindex2, CommonUtils commonUtils2)
|
||||||
|
{
|
||||||
|
var ctor = type2.InternalGetTypeConstructor0OrFirst();
|
||||||
|
var ctorParms = new object[ctor.GetParameters().Length];
|
||||||
|
if (indexes2?.Length != ctorParms.Length)
|
||||||
|
indexes2 = ctor.GetParameters().Select(c => row2.GetOrdinal(c.Name)).ToArray();
|
||||||
|
|
||||||
|
for (var c = 0; c < ctorParms.Length; c++)
|
||||||
|
ctorParms[c] = Utils.InternalDataReaderGetValue(commonUtils2, row2, indexes2[c]);
|
||||||
|
return new RowInfo(ctor.Invoke(ctorParms), ctorParms.Length);
|
||||||
|
}
|
||||||
|
|
||||||
internal static MethodInfo MethodExecuteArrayRowReadClassOrTuple = typeof(Utils).GetMethod("ExecuteArrayRowReadClassOrTuple", BindingFlags.Static | BindingFlags.NonPublic);
|
internal static MethodInfo MethodExecuteArrayRowReadClassOrTuple = typeof(Utils).GetMethod("ExecuteArrayRowReadClassOrTuple", BindingFlags.Static | BindingFlags.NonPublic);
|
||||||
internal static MethodInfo MethodGetDataReaderValue = typeof(Utils).GetMethod("GetDataReaderValue", BindingFlags.Static | BindingFlags.NonPublic);
|
internal static MethodInfo MethodGetDataReaderValue = typeof(Utils).GetMethod("GetDataReaderValue", BindingFlags.Static | BindingFlags.NonPublic);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user