ArcGIS Pro 3.7 API Reference Guide
ArcGIS.Core.Data.Knowledge Namespace / KnowledgeGraphQueryFilter Class
Members Example

In This Topic
    KnowledgeGraphQueryFilter Class
    In This Topic
    Represents a filter for performing a query against a KnowledgeGraph.
    Object Model
    KnowledgeGraphQueryFilter ClassKnowledgeGraphObjectValue ClassKnowledgeGraphQueryFilter ClassSpatialReference Class
    Syntax
    Public Class KnowledgeGraphQueryFilter 
    public class KnowledgeGraphQueryFilter 
    Remarks
    Example
    Submit a Graph Query
    {
      await QueuedTask.Run(async () =>
      {
        //and assuming you have established a connection to a knowledge graph
        //...
        //Construct an openCypher query - return the first 10 entities (whatever
        //they are...)
        var query = "MATCH (n) RETURN n LIMIT 10";//default limit is 100 if not specified
                                                  //other examples...
                                                  //query = "MATCH (a:Person) RETURN [a.name, a.age] ORDER BY a.age DESC LIMIT 50";
                                                  //query = "MATCH (b:Person) RETURN { Xperson: { Xname: b.name, Xage: b.age } } ORDER BY b.name DESC";
                                                  //query = "MATCH p = (c:Person)-[:HasCar]-() RETURN p ORDER BY c.name DESC";
    
        //Create a query filter
        //Note: OutputSpatialReference is currently ignored
        var kg_qf = new KnowledgeGraphQueryFilter()
        {
          QueryText = query
        };
        //Optionally - u can choose to include provenance in the results
        //(_if_ the KG has provenance - otherwise the query will fail)
        bool includeProvenanceIfPresent = KnowledgeGraphSupportsProvenance(kg);
    
        if (includeProvenanceIfPresent)
        {
          //Only include if the KG has provenance
          kg_qf.ProvenanceBehavior =
              KnowledgeGraphProvenanceBehavior.Include;//default is exclude
        }
        //submit the query - returns a KnowledgeGraphCursor
        using (var kg_rc = kg.SubmitQuery(kg_qf))
        {
          //wait for rows to be returned from the server
          //note the "await"...
          while (await kg_rc.WaitForRowsAsync())
          {
            //Rows have been retrieved - process this "batch"...
            while (kg_rc.MoveNext())
            {
              //Get the current KnowledgeGraphRow
              using (var graph_row = kg_rc.Current)
              {
                //Graph row is an array, process all returned values...
                var val_count = (int)graph_row.GetCount();
                for (int i = 0; i < val_count; i++)
                {
                  var retval = graph_row[i];
                  //Process row value (note: recursive)
                  //See "Process a KnowledgeGraphRow Value" snippet
                  ProcessKnowledgeGraphRowValue(retval);
                }
              }
            }
          }//WaitForRowsAsync
        }//SubmitQuery
      });
    }
    Convert an Open Cypher Query Result to a Selection
    {
      await QueuedTask.Run(async () =>
      {
        //Given an open-cypher qry against an entity or relationship type
        var qry = @"MATCH (p:PhoneNumber) RETURN p LIMIT 10";
    
        //create a KG query filter
        var kg_qry_filter = new KnowledgeGraphQueryFilter()
        {
          QueryText = qry
        };
    
        //save a list of the ids
        var oids = new List<long>();
        using (var kgRowCursor = kg.SubmitQuery(kg_qry_filter))
        {
          //wait for rows to be returned asynchronously from the server
          while (await kgRowCursor.WaitForRowsAsync())
          {
            //get the rows using "standard" move next
            while (kgRowCursor.MoveNext())
            {
              //current row is accessible via ".Current" prop of the cursor
              using (var graphRow = kgRowCursor.Current)
              {
                var cell_phone = graphRow[0] as KnowledgeGraphEntityValue;
                //note: some user-managed graphs do not have objectids
                oids.Add(cell_phone.GetObjectID());
              }
            }
          }
        }
        //create a query filter using the oids
        if (oids.Count > 0)
        {
          //select them on the layer
          var qf = new ArcGIS.Core.Data.QueryFilter()
          {
            ObjectIDs = oids //apply the oids to the ObjectIds property
          };
          //select the child feature layer or standalone table representing
          //the given entity or relate type whose records are to be selected
          var phone_number_fl = kgLayer.GetLayersAsFlattenedList()
              .OfType<FeatureLayer>().First(l => l.Name == "PhoneNumber");
    
          //perform the selection
          phone_number_fl.Select(qf);
        }
      });
    }
    Inheritance Hierarchy

    System.Object
       ArcGIS.Core.Data.Knowledge.KnowledgeGraphQueryFilter

    Requirements

    Target Platforms: Windows 11 Home, Pro, Enterprise (64 bit)

    ArcGIS Pro version: 3.2 or higher.
    See Also