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);
      }
Exemple #3
0
        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);
        }
Exemple #4
0
        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));
        }