public static void EmitBodyBeginForGetEnumerable(this ILGenerator ilgen, FunctionData func, FunctionReturnTypeInfo funcReturnTypeInfo) { ilgen.Emit(OpCodes.Ldarg_0); ilgen.Emit(OpCodes.Ldarg_0); var getMapperMethod = typeof(TypedDataContextBase).GetMethod("GetMapper", BindingFlags.NonPublic | BindingFlags.Instance) .MakeGenericMethod(funcReturnTypeInfo.ElementType); ilgen.Emit(OpCodes.Call, getMapperMethod); ilgen.Emit(OpCodes.Ldstr, func.Name); ilgen.Emit(OpCodes.Ldc_I4, func.ArgumentCount); // Array length ilgen.Emit(OpCodes.Newarr, typeof(DataParameter)); }
public static void EmitBodyEndForGetEnumerable(this ILGenerator ilgen, FunctionReturnTypeInfo funcReturnTypeInfo) { var queryProcMethod = typeof(DataConnectionExtensions).GetMethods(BindingFlags.Static | BindingFlags.Public) .Single(x => x.Name == "QueryProc" && x.GetParameters().Length == 4) .MakeGenericMethod(funcReturnTypeInfo.ElementType); ilgen.Emit(OpCodes.Call, queryProcMethod); // Is the return type a single value? if (funcReturnTypeInfo.CollectionType == null) { var firstMethod = typeof (Enumerable).GetMethods() .Single(x => x.Name == "First" && x.GetParameters().Length == 1) .MakeGenericMethod(funcReturnTypeInfo.ElementType); ilgen.Emit(OpCodes.Call, firstMethod); } ilgen.Emit(OpCodes.Ret); }
public static void EmitBodyEndForGetEnumerable(this ILGenerator ilgen, FunctionReturnTypeInfo funcReturnTypeInfo) { var queryProcMethod = typeof(DataConnectionExtensions).GetMethods(BindingFlags.Static | BindingFlags.Public) .Single(x => x.Name == "QueryProc" && x.GetParameters().Length == 4) .MakeGenericMethod(funcReturnTypeInfo.ElementType); ilgen.Emit(OpCodes.Call, queryProcMethod); // Is the return type a single value? if (funcReturnTypeInfo.CollectionType == null) { var firstMethod = typeof(Enumerable).GetMethods() .Single(x => x.Name == "First" && x.GetParameters().Length == 1) .MakeGenericMethod(funcReturnTypeInfo.ElementType); ilgen.Emit(OpCodes.Call, firstMethod); } ilgen.Emit(OpCodes.Ret); }