private void copyTable()
            {
                dropDestinationTable();

                using (var cmd = _destination.CreateCommand())
                {
                    cmd.CommandText = _destinationTable;
                    cmd.CommandType = CommandType.TableDirect;

                    _operation.StatusDescription = "Services_Definitions_CreatingDestTable";
                    _operation.IsProgressIndeterminate = true;

                    IDbCommand readCmd = _source.CreateCommand();
                    readCmd.CommandText = "SELECT * FROM " + _sourceExpression;
                    DataTable schema = null;
                    using (var sourceReader = readCmd.ExecuteReader())
                    {
                        schema = sourceReader.GetSchemaTable();
                        sourceReader.Close();
                    }

                    createDestinationTable(schema);

                    int rowCount = countRowsToCopy();

                    using (var sourceReader = readCmd.ExecuteReader())
                    {
                        _operation.StatusDescription = "Services_Definitions_LoadingTaxa";
                        _operation.IsProgressIndeterminate = false;

                        var copyOperation = new ProgressInterval(_operation, _progressPerTaxonList, rowCount);

                        using (var destinationResultSet = cmd.ExecuteResultSet(ResultSetOptions.Updatable | ResultSetOptions.Scrollable))
                        {
                            while (sourceReader.Read())
                            {
                                SqlCeUpdatableRecord record = destinationResultSet.CreateRecord();
                                object[] values = new object[sourceReader.FieldCount];
                                sourceReader.GetValues(values);
                                record.SetValues(values);
                                destinationResultSet.Insert(record);
                                copyOperation.advance();
                            }
                            destinationResultSet.Close();
                        }
                        sourceReader.Close();
                    }
                }
                return;
            }
        private List<IISOViewModel> buildQueryResult(IList<ISerializableObject> result)
        {
            CurrentOperation = new AsyncOperationInstance(true, null)
            {
                StatusDescription = "SelectFD_Status_FillingResults",
                Progress = 0,
                IsProgressIndeterminate = false,
            };

            List<IISOViewModel> list = new List<IISOViewModel>(result.Count());
            if (result.Count() == 0)
            {
                sendNotification("SelectFD_ResultEmpty");
                return list;
            }

            ProgressInterval localProgress = null;
            localProgress = new ProgressInterval(CurrentOperation, 100f, result.Count());

            var conversionQuery = from obj in result
                                  select ISOStore.addOrRetrieveVMForISO(obj);

            foreach(var line in conversionQuery)
            {
                list.Add(line);
                if (localProgress != null)
                    if (localProgress.IsCancelRequested)
                        break;
                    else
                        localProgress.advance();
            }
            return list;
        }