public ObservableCollection<dynamic> GetDefaultMapping()
        {
            _currentMapping = new ObservableCollection<object>();

            var hideProperties = new List<string>
                                     {
                                         "ContactID",
                                         "CompanyId",
                                         "Company",
                                         "CompanyReference",
                                         "HasErrors",
                                         "Item",
                                         "Error",
                                         "EntityState",
                                         "EntityKey"
                                     };

            ObservableCollection<string> fileFields = GetColumns(_currentTable);

            var emptyContact = new Contact();
            PropertyInfo[] contactMembers = emptyContact.GetType().GetProperties();
            foreach (PropertyInfo contactMember in contactMembers)
            {
                if (hideProperties.Contains(contactMember.Name)) continue;

                dynamic field = new ExpandoObject();
                field.CrmField = contactMember.Name;
                field.FileField = "";
                field.FileFields = fileFields;

                _currentMapping.Add(field);
            }

            return _currentMapping;
        }
        private void onImportWorkerOnDoWork(object sender, DoWorkEventArgs e)
        {
            var fields = _currentMapping.Where(f => !string.IsNullOrEmpty(f.FileField));
            if (fields.Count() == 0)
            {
                _importWorker.ReportProgress(100);
                return;
            }

            var records = GetRecords(_currentTable);

            var contactsToSave = new List<Contact>();

            for (int i = 0; i < records.Count; i++)
            {
                var record = records[i];
                var contact = new Contact();
                foreach (var field in fields)
                {
                    var value = (object)((IDictionary<string, object>) record)[field.FileField];
                    value = value is DBNull? "": value;

                    contact.GetType().GetProperty((string) field.CrmField).SetValue(contact,value, null);
                }
                //ContactsManager.Current.Save(contact);

                if (contact.Title == null) contact.Title = string.Empty;
                if (contact.Suffix == null) contact.Suffix = string.Empty;
                if (contact.FirstName == null) contact.FirstName = string.Empty;
                if (contact.LastName == null) contact.LastName = string.Empty;

                contactsToSave.Add(contact);

                _importWorker.ReportProgress(Convert.ToInt32(Math.Round((double) (i + 1)/records.Count*80.0, 0)));
            }

            ContactsManager.Current.Save(contactsToSave);
            _importWorker.ReportProgress(100);
        }