static FeatureMerger()
        {
            Type adoMergerType = Type.GetType("System.Data.Merger, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
            _adoMergerTypeHandle = adoMergerType.TypeHandle;

            _createMerger = generateCreateMergerDelegate();
            _mergeSchema = generateMergeSchemaDelegate();
            _getKeyIndex = generateGetKeyIndexDelegate();
        }
        private static MergeSchemaDelegate generateMergeSchemaDelegate()
        {
#if !CFBuild
            DynamicMethod mergeSchemaMethod = new DynamicMethod("Merger_MergeSchema",
                                                                MethodAttributes.Public | MethodAttributes.Static,
                                                                CallingConventions.Standard,
                                                                typeof(DataTable),
                                                                new Type[] { typeof(object), typeof(DataTable) },
                                                                Type.GetTypeFromHandle(_adoMergerTypeHandle),
                                                                false);

            Type merger = Type.GetTypeFromHandle(_adoMergerTypeHandle);
            ILGenerator il = mergeSchemaMethod.GetILGenerator();
            il.Emit(OpCodes.Ldarg_0);
            il.Emit(OpCodes.Castclass, merger);
            il.Emit(OpCodes.Ldarg_1);
            MethodInfo mergeSchemaInfo = merger.GetMethod("MergeSchema",
                                                          BindingFlags.Instance | BindingFlags.NonPublic);
            il.Emit(OpCodes.Call, mergeSchemaInfo);
            il.Emit(OpCodes.Ret);

            MergeSchemaDelegate d = (MergeSchemaDelegate)mergeSchemaMethod.CreateDelegate(typeof(MergeSchemaDelegate));
            return d;
#else
            MergeSchemaDelegate d = new MergeSchemaDelegate(MergeSchemaInvoker);
            return d;
#endif
        }
 static FeatureMerger()
 {
     _createMerger = generateCreateMergerDelegate();
     _mergeSchema = generateMergeSchemaDelegate();
     _getKeyIndex = generateGetKeyIndexDelegate();
     _getDataKeyColumnReference = generateGetDataKeyColumnReferenceDelegate();
     _createDataKey = generateCreateDataKeyDelegate();
     _createEmptyDataKey = generateCreateEmptyDataKeyDelegate();
     _getDataKeyFromUniqueConstraint = generateGetDataKeyFromUniqueConstraintDelegate();
     _dataKeyGetSortIndex = generateDataKeyGetSortIndexDelegate();
     _getDataKeyHasValue = generateGetDataKeyHasValueDelegate();
     _cloneDataColumn = generateCloneDataColumnDelegate();
 }