private DynamicMethod CompileDynamicMethod(DynamicTypeGenerator gen, SqlExpression expression, Type elementType)
		{
			Type objectReaderType = typeof(ObjectMaterializer<>).MakeGenericType(this.dataReaderType);
			DynamicMethod dm = new DynamicMethod(
				"Read_" + elementType.Name,
				elementType,
				new Type[] { objectReaderType },
				true
				);
			gen.GenerateBody(dm.GetILGenerator(), expression);
			return dm;
		}
		private void CompileCapturedMethod(DynamicTypeGenerator gen, SqlExpression expression, Type elementType)
		{
			TypeBuilder tb = ObjectReaderCompiler.CaptureModule.DefineType("reader_type_" + ObjectReaderCompiler.GetNextId());
			MethodBuilder mb = tb.DefineMethod(
				"Read_" + elementType.Name,
				MethodAttributes.Static | MethodAttributes.Public,
				CallingConventions.Standard,
				elementType,
				new Type[] { typeof(ObjectMaterializer<>).MakeGenericType(this.dataReaderType) }
				);
			gen.GenerateBody(mb.GetILGenerator(), (SqlExpression)SqlDuplicator.Copy(expression));
			tb.CreateType();
		}