mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 01:05:27 +08:00 
			
		
		
		
	- 修复 IAdo.Query\<匿名类\>(sql) 错误;
This commit is contained in:
		@@ -532,14 +532,5 @@
 | 
			
		||||
            <param name="that"></param>
 | 
			
		||||
            <returns></returns>
 | 
			
		||||
        </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>
 | 
			
		||||
</doc>
 | 
			
		||||
 
 | 
			
		||||
@@ -1463,7 +1463,7 @@ namespace FreeSql.Internal
 | 
			
		||||
                                var name = row2.GetName(a);
 | 
			
		||||
                                //expando[name] = row2.GetValue(a);
 | 
			
		||||
                                if (expandodic.ContainsKey(name)) continue;
 | 
			
		||||
                                expandodic.Add(name, Utils.InternalDataReaderGetValue(_commonUtils, row2, a));
 | 
			
		||||
                                expandodic.Add(name, Utils.InternalDataReaderGetValue(commonUtils2, row2, a));
 | 
			
		||||
                            }
 | 
			
		||||
                            //expando = expandodic;
 | 
			
		||||
                            return new RowInfo(expandodic, fc);
 | 
			
		||||
@@ -1471,6 +1471,8 @@ namespace FreeSql.Internal
 | 
			
		||||
                        return dynamicFunc;// Expression.Lambda<Func<Type, int[], DbDataReader, int, RowInfo>>(null);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    if (type.IsAnonymousType()) return ExecuteArrayRowReadAnonymousType;
 | 
			
		||||
 | 
			
		||||
                    //类注入属性
 | 
			
		||||
                    var typetb = GetTableByEntity(type, _commonUtils);
 | 
			
		||||
                    var retExp = Expression.Variable(type, "ret");
 | 
			
		||||
@@ -1596,12 +1598,13 @@ namespace FreeSql.Internal
 | 
			
		||||
                        var propIndex = 0;
 | 
			
		||||
                        foreach (var prop in props)
 | 
			
		||||
                        {
 | 
			
		||||
                            if (typetb.ColumnsByCsIgnore.ContainsKey(prop.Name))
 | 
			
		||||
                            if (typetb?.ColumnsByCsIgnore.ContainsKey(prop.Name) == true)
 | 
			
		||||
                            {
 | 
			
		||||
                                ++propIndex;
 | 
			
		||||
                                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 propGetSetMethod = prop.GetSetMethod(true);
 | 
			
		||||
@@ -1700,6 +1703,18 @@ namespace FreeSql.Internal
 | 
			
		||||
            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 MethodGetDataReaderValue = typeof(Utils).GetMethod("GetDataReaderValue", BindingFlags.Static | BindingFlags.NonPublic);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user