private void QueryDuplicates()
        {
            WorkAsync(
                string.Format("Querying Duplicates [Entity:{0} - Attributes Selected:{1}", entityDropdown.SelectedValue,
                    entityAttributeView.RowCount),
                e => // Work To Do Asynchronously
                {
                    var fetchXmlBuilder = new DuplicateQueryBuilder();
                    var formEntryReader = new FormEntryReader(fetchXmlBuilder);
                    formEntryReader.ReadEntitySelected(entityDropdown);
                    formEntryReader.ReadUniqueIdentifierAttributes(entityAttributeView);
                    fetchXmlBuilder.AddCustomFilterXml(customXMLFilterBox.Text);
                    e.Result = GetRecordsFromCrm(fetchXmlBuilder.GetOutput());

                },
                e => // Cleanup when work has completed
                {
                    var reader = new FetchXmlResponseReader(e.Result as EntityCollection);

                    var fetchXmlBuilder = new DuplicateQueryBuilder();
                    var formEntryReader = new FormEntryReader(fetchXmlBuilder);
                    formEntryReader.ReadEntitySelected(entityDropdown);
                    formEntryReader.ReadUniqueIdentifierAttributes(entityAttributeView);
                    fetchXmlBuilder.AddCustomFilterXml(customXMLFilterBox.Text);
                    var dataSet = reader.ParseGroupByResponse(fetchXmlBuilder);
                    SafeSetDataSource(duplicatesGrid, dataSet);
                });
        }
 private void Output_Debug(object sender, EventArgs e)
 {
     var fetchXmlBuilder = new DuplicateQueryBuilder();
     var formEntryReader = new FormEntryReader(fetchXmlBuilder);
     formEntryReader.ReadEntitySelected(entityDropdown);
     formEntryReader.ReadUniqueIdentifierAttributes(entityAttributeView);
     fetchXmlBuilder.AddCustomFilterXml(customXMLFilterBox.Text);
     var query = fetchXmlBuilder.GetOutput().Query;
     MessageBox.Show(string.Format("Hit CTRL - C to copy the query below: {0}", query));
 }