<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Is there a way to create a Definition Query works with Query Filter synchronously in ArcGIS PRO SDK? in ArcGIS Pro SDK Questions</title>
    <link>https://community.esri.com/t5/arcgis-pro-sdk-questions/is-there-a-way-to-create-a-definition-query-works/m-p/1012517#M5896</link>
    <description>&lt;P&gt;I have created a table view which users can filter features by making selection via multiple combo boxes&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="OguzSariyildiz_0-1609183901379.png" style="width: 999px;"&gt;&lt;img src="https://community.esri.com/t5/image/serverpage/image-id/2913iCE6637A59A972B8C/image-size/large?v=v2&amp;amp;px=999" role="button" title="OguzSariyildiz_0-1609183901379.png" alt="OguzSariyildiz_0-1609183901379.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;public void UpdateSelection()
{
    QueuedTask.Run(() =&amp;gt;
    {
        if (_tableContent != null)
        {
            QueryFilter qfFType = new QueryFilter { WhereClause = 
             $@"FEATURE_CLASS = '{Feature}'" };
            QueryFilter qfState = new QueryFilter { WhereClause = 
            $@"STATE_ALPHA = '{State}'" };
            QueryFilter qfCounty = new QueryFilter { WhereClause = 
            $@"COUNTY_NAME = '{County}'" };
            QueryFilter qfQuad = new QueryFilter { WhereClause = 
            $@"MAP_NAME = '{Quad}'" };

            Dictionary&amp;lt;QueryFilter, string&amp;gt; FieldFilterDic = new 
                Dictionary&amp;lt;QueryFilter, string&amp;gt;
                    {
                        { qfFType, Feature},
                        { qfState, State },
                        { qfCounty, County},
                        { qfQuad, Quad}
                    };

            if (Feature == "All")
                FieldFilterDic.Remove(qfFType);
            if (State == "All")
                FieldFilterDic.Remove(qfState);
            if (County == "All")
                FieldFilterDic.Remove(qfCounty);
            if (Quad == "All")
                FieldFilterDic.Remove(qfQuad);

            if (FieldFilterDic.Count &amp;gt; 0)
            {
                var firstFilter = FieldFilterDic.Keys.First();
                var firststring = FieldFilterDic[firstFilter];
                GNISFLayer.Select(firstFilter, 
                    SelectionCombinationMethod.New);
                FieldFilterDic.Remove(firstFilter);

                foreach (KeyValuePair&amp;lt;QueryFilter, string&amp;gt; kvp in FieldFilterDic)
                {
                    GNISFLayer.Select(kvp.Key, 
                         SelectionCombinationMethod.And);
                }
            }
            else
                GNISFLayer.ClearSelection();
        }
    });
}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The method above works fine for selecting features based on multiple criteria taken from combo boxes.&amp;nbsp;&lt;/P&gt;&lt;P&gt;I would also like to remove features from the display as user filters out the features.&amp;nbsp;&lt;/P&gt;&lt;P&gt;I think I can adapt the syncing myself as far as if I can use multiple criteria on the Definition Query. For instance,&amp;nbsp; something like&lt;/P&gt;&lt;P&gt;Definition Query =&amp;nbsp;GNISFLayer.SetDefinitionQuery($@"FEATURE_CLASS = '{Feature}' &amp;amp;&amp;amp; $@"STATE_ALPHA = '{State}'"");&lt;/P&gt;</description>
    <pubDate>Mon, 28 Dec 2020 19:47:56 GMT</pubDate>
    <dc:creator>Amadeus111</dc:creator>
    <dc:date>2020-12-28T19:47:56Z</dc:date>
    <item>
      <title>Is there a way to create a Definition Query works with Query Filter synchronously in ArcGIS PRO SDK?</title>
      <link>https://community.esri.com/t5/arcgis-pro-sdk-questions/is-there-a-way-to-create-a-definition-query-works/m-p/1012517#M5896</link>
      <description>&lt;P&gt;I have created a table view which users can filter features by making selection via multiple combo boxes&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="OguzSariyildiz_0-1609183901379.png" style="width: 999px;"&gt;&lt;img src="https://community.esri.com/t5/image/serverpage/image-id/2913iCE6637A59A972B8C/image-size/large?v=v2&amp;amp;px=999" role="button" title="OguzSariyildiz_0-1609183901379.png" alt="OguzSariyildiz_0-1609183901379.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;public void UpdateSelection()
{
    QueuedTask.Run(() =&amp;gt;
    {
        if (_tableContent != null)
        {
            QueryFilter qfFType = new QueryFilter { WhereClause = 
             $@"FEATURE_CLASS = '{Feature}'" };
            QueryFilter qfState = new QueryFilter { WhereClause = 
            $@"STATE_ALPHA = '{State}'" };
            QueryFilter qfCounty = new QueryFilter { WhereClause = 
            $@"COUNTY_NAME = '{County}'" };
            QueryFilter qfQuad = new QueryFilter { WhereClause = 
            $@"MAP_NAME = '{Quad}'" };

            Dictionary&amp;lt;QueryFilter, string&amp;gt; FieldFilterDic = new 
                Dictionary&amp;lt;QueryFilter, string&amp;gt;
                    {
                        { qfFType, Feature},
                        { qfState, State },
                        { qfCounty, County},
                        { qfQuad, Quad}
                    };

            if (Feature == "All")
                FieldFilterDic.Remove(qfFType);
            if (State == "All")
                FieldFilterDic.Remove(qfState);
            if (County == "All")
                FieldFilterDic.Remove(qfCounty);
            if (Quad == "All")
                FieldFilterDic.Remove(qfQuad);

            if (FieldFilterDic.Count &amp;gt; 0)
            {
                var firstFilter = FieldFilterDic.Keys.First();
                var firststring = FieldFilterDic[firstFilter];
                GNISFLayer.Select(firstFilter, 
                    SelectionCombinationMethod.New);
                FieldFilterDic.Remove(firstFilter);

                foreach (KeyValuePair&amp;lt;QueryFilter, string&amp;gt; kvp in FieldFilterDic)
                {
                    GNISFLayer.Select(kvp.Key, 
                         SelectionCombinationMethod.And);
                }
            }
            else
                GNISFLayer.ClearSelection();
        }
    });
}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The method above works fine for selecting features based on multiple criteria taken from combo boxes.&amp;nbsp;&lt;/P&gt;&lt;P&gt;I would also like to remove features from the display as user filters out the features.&amp;nbsp;&lt;/P&gt;&lt;P&gt;I think I can adapt the syncing myself as far as if I can use multiple criteria on the Definition Query. For instance,&amp;nbsp; something like&lt;/P&gt;&lt;P&gt;Definition Query =&amp;nbsp;GNISFLayer.SetDefinitionQuery($@"FEATURE_CLASS = '{Feature}' &amp;amp;&amp;amp; $@"STATE_ALPHA = '{State}'"");&lt;/P&gt;</description>
      <pubDate>Mon, 28 Dec 2020 19:47:56 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-pro-sdk-questions/is-there-a-way-to-create-a-definition-query-works/m-p/1012517#M5896</guid>
      <dc:creator>Amadeus111</dc:creator>
      <dc:date>2020-12-28T19:47:56Z</dc:date>
    </item>
    <item>
      <title>Re: Is there a way to create a Definition Query works with Query Filter synchronously in ArcGIS PRO SDK?</title>
      <link>https://community.esri.com/t5/arcgis-pro-sdk-questions/is-there-a-way-to-create-a-definition-query-works/m-p/1012570#M5898</link>
      <description>&lt;P&gt;I was able to use multiple criteria when setting definition by using AND instead of &amp;amp;&amp;amp;.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;//Make sure to insert spaces before and after " AND "
string dq = $@"FEATURE_CLASS = '{Feature}'" + " AND " + $@"STATE_ALPHA = '{State}'"
GNISFLayer.SetDefinitionQuery(dq)&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Then, I came up with this solution:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;public Task&amp;lt;Dictionary&amp;lt;QueryFilter, string[]&amp;gt;&amp;gt; UpdateSelection()
        {
            return QueuedTask.Run(() =&amp;gt;
            {
                if (_tableContent != null)
                {
                    string GNISFType = $@"FEATURE_CLASS = '{Feature}'";
                    string GNISState = $@"STATE_ALPHA = '{State}'";
                    string GNISCounty = $@"COUNTY_NAME = '{County}'";
                    string GNISQuad = $@"MAP_NAME = '{Quad}'";

                    string[] GNISFTypeArr = { GNISFType, Feature };
                    string[] GNISStateArr = { GNISState, State };
                    string[] GNISCountyArr = { GNISCounty, County };
                    string[] GNISQuadArr = { GNISQuad, Quad };

                    QueryFilter qfFType = new QueryFilter { WhereClause = GNISFType };
                    QueryFilter qfState = new QueryFilter { WhereClause = GNISState };
                    QueryFilter qfCounty = new QueryFilter { WhereClause = GNISCounty };
                    QueryFilter qfQuad = new QueryFilter { WhereClause = GNISQuad };

                    FieldFilterDic = new Dictionary&amp;lt;QueryFilter, string[]&amp;gt;
                    {
                        { qfFType, GNISFTypeArr},
                        { qfState, GNISStateArr},
                        { qfCounty, GNISCountyArr},
                        { qfQuad, GNISQuadArr}
                    };

                    if (Feature == "All")
                        FieldFilterDic.Remove(qfFType);
                    if (State == "All")
                        FieldFilterDic.Remove(qfState);
                    if (County == "All")
                        FieldFilterDic.Remove(qfCounty);
                    if (Quad == "All")
                        FieldFilterDic.Remove(qfQuad);

                    if (FieldFilterDic.Count &amp;gt; 0)
                    {
                        foreach (KeyValuePair&amp;lt;QueryFilter, string[]&amp;gt; kvp in FieldFilterDic)
                        {
                            if ( kvp.Key == FieldFilterDic.Keys.First())
                                GNISFLayer.Select(kvp.Key, SelectionCombinationMethod.New);
                            else
                                GNISFLayer.Select(kvp.Key, SelectionCombinationMethod.And);
                        }    
                    }
                    else
                        GNISFLayer.ClearSelection();
                }
                return FieldFilterDic;
            });
        }

        private void DisplaySelBoolChanged()
        {
            if (DisplaySelBool)
            {
                QueuedTask.Run(() =&amp;gt;
                {
                    if (SelectionDict.Count &amp;gt; 0)
                    {
                        GNISFLayer.RemoveAllDefinitionFilters();
                        string entireExp = null;
                        

                        if (SelectionDict.Count &amp;gt; 0)
                        {
                            foreach (KeyValuePair&amp;lt;QueryFilter, string[]&amp;gt; kvp in FieldFilterDic)
                            {
                                if (kvp.Key == SelectionDict.Keys.Last())
                                    entireExp += kvp.Value[0];
                                else
                                    entireExp += kvp.Value[0] + " AND ";
                            }
                        }

                        MessageBox.Show(entireExp);
                        GNISFLayer.SetDefinitionQuery(entireExp);
                    }
                    else
                    {
                        GNISFLayer.RemoveAllDefinitionFilters();
                        DisplaySelBool = false;
                    }
                });
            }
            //else
            //    GNISFLayer.RemoveAllDefinitionFilters();
        }&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;first method (UpdateSelection()) use the dictionary and return it to the main thread and the same dictionary is used for setting up/impementing the Definition Filter in the&amp;nbsp;DisplaySelBoolChanged() method&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt; private async void FeatureTypeSelectionChanged()
        {
            var resultDic = await UpdateSelection();
            SelectionDict = resultDic;
            DisplaySelBoolChanged();
        }&lt;/LI-CODE&gt;</description>
      <pubDate>Tue, 29 Dec 2020 17:43:26 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-pro-sdk-questions/is-there-a-way-to-create-a-definition-query-works/m-p/1012570#M5898</guid>
      <dc:creator>Amadeus111</dc:creator>
      <dc:date>2020-12-29T17:43:26Z</dc:date>
    </item>
  </channel>
</rss>

