ArcGIS Pro 3.6 API Reference Guide
ArcGIS.Core.CIM Namespace / CIMKnowledgeGraphSubGraph Class / EntityFilters Property
Example

In This Topic
    EntityFilters Property
    In This Topic
    Gets or sets the entity filters of the subgraph. The entities of the subgraph are the entities included by "include" filters (or all entities if there is no "include" filter), except entities excluded by "exclude" filters.
    Syntax
    public CIMKnowledgeGraphNamedTypeFilter[] EntityFilters {get; set;}
    Public Property EntityFilters As CIMKnowledgeGraphNamedTypeFilter()
    Example
    Configure Centrality Entity SubGraph Filters
          //using ArcGIS.Core.Data.Knowledge.Extensions;
    
          await QueuedTask.Run(() =>
    {
    
              //Assume KG contains Entity NamedTypes "A","B","C", and "D"
              //
              //We can use either of a CIMKnowledgeGraphNamedTypeFilterByInstances
              //or CIMKnowledgeGraphNamedTypeFilterByType to filter instances for
              //_including_ in or _excluding_ from entities and relates wrt the subgraph.
              //
              //Use CIMKnowledgeGraphNamedTypeFilterByInstances to filter by instance id
              //Use CIMKnowledgeGraphNamedTypeFilterByType to filter by type name and with
              //an optional property filter predicate to filter by property value(s)
    
              //Example 1.
              //Include all entities (and relates) from the kg in the subgraph
              //Leave kg_subgraph.EntityFilters null.
              //(kg_subgraph.RelationshipFilters is also null)
    
              //The collection of Entity and Relate filters are both empty
      //Everything is included
              var kg_subgraph = new CIMKnowledgeGraphSubGraph();
    
              //Example 2
              //Include a set of Entities from A (all of B, C, D will be implicitly excluded)
              var kg_filter2 = new CIMKnowledgeGraphNamedTypeFilterByInstances()
      {
        FilterType = KGFilterType.Include,
        NamedType = "A",
                  InstancesIDs = list_of_ids.ToArray() //list_of_ids contains desired uids for "A"
                                                                                           //note: -if list_of_ids is empty then -no-
                                             //instances of A will be included.
              };
    
              var entity_filters2 = new List<CIMKnowledgeGraphNamedTypeFilter>();
      entity_filters2.Add(kg_filter2);
    
      //note: All relates are included as no RelationshipFilters are specified
      //var kg_subgraph = ...
      kg_subgraph.EntityFilters = entity_filters2.ToArray();
    
      //Example 3
      //Exclude a set of Entities from A (all of B, C, D will be implicitly included)
      var kg_filter3 = new CIMKnowledgeGraphNamedTypeFilterByInstances()
      {
                  FilterType = KGFilterType.Exclude,
                  NamedType = "A",
                  InstancesIDs = list_of_ids.ToArray() //list_of_ids contains desired uids for "A"
                                                                                           //note: -if list_of_ids is empty then -no-
                                                                                           //instances of A will be excluded.
              };
    
      var entity_filters3 = new List<CIMKnowledgeGraphNamedTypeFilter>();
      entity_filters3.Add(kg_filter3);
    
      //note: All relates are included as no RelationshipFilters are specified
      //var kg_subgraph = ...
      kg_subgraph.EntityFilters = entity_filters3.ToArray();
    
      //Example 4
      //Include all Entities from A via named type (all of B, C, D
      //will be implicitly excluded)
    
      var kg_filter4 = new CIMKnowledgeGraphNamedTypeFilterByType()
      {
                  FilterType = KGFilterType.Include,
        NamedType = "A" //all of A will be included
                        //predicate is empty
      };
    
      var entity_filters4 = new List<CIMKnowledgeGraphNamedTypeFilter>();
      entity_filters4.Add(kg_filter4);
    
      //note: All relates are included as no RelationshipFilters are specified
      //var kg_subgraph = ...
      kg_subgraph.EntityFilters = entity_filters4.ToArray();
    
              //Example 5
              //Exclude all Entities from A via named type (all of B, C, D
              //will be implicitly included)
    
              var kg_filter5 = new CIMKnowledgeGraphNamedTypeFilterByType()
              {
                  FilterType = KGFilterType.Exclude,
                  NamedType = "A" //all of A will be excluded
                        //predicate is empty
              };
    
              var entity_filters5 = new List<CIMKnowledgeGraphNamedTypeFilter>();
      entity_filters5.Add(kg_filter5);
    
      //note: All relates are included as no RelationshipFilters are specified
      //var kg_subgraph = ...
      kg_subgraph.EntityFilters = entity_filters5.ToArray();
    
      //Example 6
      //Include all entities from B and C and
      //a subset from D via a set of ids (A is implicitly excluded)
      var kg_filter6_b = new CIMKnowledgeGraphNamedTypeFilterByType();
      var kg_filter6_c = new CIMKnowledgeGraphNamedTypeFilterByType();
      
      kg_filter6_b.NamedType = "B";//Include is default, predicate is empty
              kg_filter6_c.NamedType = "C";//Include is default, predicate is empty
    
              //TODO... populate list with uids from "D"...
              var kg_filter6_d = new CIMKnowledgeGraphNamedTypeFilterByInstances();
              kg_filter6_d.NamedType = "D";//Include is default
              kg_filter6_d.InstancesIDs = list_of_ids.ToArray();
    
      var entity_filters6 = new List<CIMKnowledgeGraphNamedTypeFilter>();
      entity_filters6.Add(kg_filter6_b);//order doesn't matter
      entity_filters6.Add(kg_filter6_c);
      entity_filters6.Add(kg_filter6_d);
    
      //note: All relates are included as no RelationshipFilters are specified
      //var kg_subgraph = ...
      kg_subgraph.EntityFilters = entity_filters6.ToArray();
    
      //Example 7
      //Exclude all entities from B and C and
      //a subset from D (A is implicitly included)
      var kg_filter7_b = new CIMKnowledgeGraphNamedTypeFilterByType();
      var kg_filter7_c = new CIMKnowledgeGraphNamedTypeFilterByType();
    
      kg_filter7_b.NamedType = "B";//predicate is empty
              kg_filter7_c.NamedType = "C";//predicate is empty
              kg_filter7_b.FilterType = KGFilterType.Exclude;
      kg_filter7_c.FilterType = KGFilterType.Exclude;
    
              var kg_filter7_d = new CIMKnowledgeGraphNamedTypeFilterByInstances();
              kg_filter7_d.NamedType = "D";
      kg_filter7_d.FilterType = KGFilterType.Exclude;
      kg_filter7_d.InstancesIDs = list_of_ids.ToArray();//ids to be excluded
    
      var entity_filters7 = new List<CIMKnowledgeGraphNamedTypeFilter>();
      entity_filters7.Add(kg_filter7_b);//order doesn't matter
      entity_filters7.Add(kg_filter7_c);
      entity_filters7.Add(kg_filter7_d);
    
      //note: All relates are included as no RelationshipFilters are specified
      //var kg_subgraph = ...
      kg_subgraph.EntityFilters = entity_filters7.ToArray();
    
      //Example 8
      //Include a subset of Entities from A using a property
      //filter predicate (all of B, C, D will be implicitly excluded)
    
              //we -must- use a predicate prefix in our expression
              //select instances of A w/ Material = 'Steel'
              var expr8 = $"a.Material = 'Steel'";//prefix can be anything - foo, bar, fred, etc.
    
              var kg_filter8 = new CIMKnowledgeGraphNamedTypeFilterByType()
      {
        NamedType = "A",//Include is default
                  PropertyFilterPredicate = expr8 //include ids w/Material='Steel'
              };
    
      var entity_filters8 = new List<CIMKnowledgeGraphNamedTypeFilter>();
      entity_filters8.Add(kg_filter8);
    
      //note: All relates are included as no RelationshipFilters are specified
      //var kg_subgraph = ...
      kg_subgraph.EntityFilters = entity_filters8.ToArray();
    
      //Example 9
      //Exclude a subset of Entities from A using a property
      //filter predicate (all of B, C, D will be implicitly included)
    
      //we -must- use a predicate prefix in our expression
              //select instances of A with Material <> 'Steel'
              var expr9 = $"a.Material <> 'Steel'";//prefix can be anything - foo, bar, fred, etc.
    
              var kg_filter9 = new CIMKnowledgeGraphNamedTypeFilterByType()
      {
        FilterType = KGFilterType.Exclude,
                  NamedType = "A",
                  PropertyFilterPredicate = expr9 //exclude ids w/Material <> 'Steel'
              };
    
      var entity_filters9 = new List<CIMKnowledgeGraphNamedTypeFilter>();
      entity_filters9.Add(kg_filter9);
    
              //Note: All relates are included as no RelationshipFilters are specified
              //var kg_subgraph = ...
              kg_subgraph.EntityFilters = entity_filters9.ToArray();
          });
    Combine Centrality Entity and Relationship SubGraph Filters
          //using ArcGIS.Core.Data.Knowledge.Extensions;
    
          await QueuedTask.Run(() =>
    {
      //Assume Entity NamedTypes "A","B","C", and "D"
      //Assume Relationship NamedTypes "R1","R2",and "R3"
    
      //Example 1
      //Include all Entities from A and B
      //Include all Relates from R1 and R2
      //(all of C, D, and R3 will be implicitly excluded)
      var kg_filter1_a = new CIMKnowledgeGraphNamedTypeFilterByType()
      {
        FilterType = KGFilterType.Include,//default
                  NamedType = "A"
      };
      var kg_filter1_b = new CIMKnowledgeGraphNamedTypeFilterByType()
      {
                  FilterType = KGFilterType.Include,//default
                  NamedType = "B"
      };
      var kg_filter1_r1 = new CIMKnowledgeGraphNamedTypeFilterByType()
      {
                  FilterType = KGFilterType.Include,//default
                  NamedType = "R1"
      };
      var kg_filter1_r2 = new CIMKnowledgeGraphNamedTypeFilterByType()
      {
                  FilterType = KGFilterType.Include,//default
                  NamedType = "R2"
      };
    
      var entity_filters1 = new List<CIMKnowledgeGraphNamedTypeFilter>();
      entity_filters1.Add(kg_filter1_a);
      entity_filters1.Add(kg_filter1_b);
    
      var relate_filters1 = new List<CIMKnowledgeGraphNamedTypeFilter>();
      relate_filters1.Add(kg_filter1_r1);
      relate_filters1.Add(kg_filter1_r2);
    
      //var kg_subgraph = ...
      kg_subgraph.EntityFilters = entity_filters1.ToArray();
      kg_subgraph.RelationshipFilters = relate_filters1.ToArray();
    
      //Example 2 - 
      //Include a subset of Entities from A using a predicate,
      //and all of B, C, D and all of R1 and R3 (but not R2)
    
      var prefix2 = "a";//prefix can be anything - foo, bar, fred, etc.
      var expr2 = $"{prefix2}.Material = 'Steel' AND " +
                      $"{prefix2}.Role = 'Tier1'";
    
      var kg_filter2_a = new CIMKnowledgeGraphNamedTypeFilterByType()
      {
        NamedType = "A", //Include is default
                  PropertyFilterPredicate = expr2
      };
      var kg_filter2_b = new CIMKnowledgeGraphNamedTypeFilterByType()
      {
        NamedType = "B" //Include is default
              };
      var kg_filter2_c = new CIMKnowledgeGraphNamedTypeFilterByType()
      {
        NamedType = "C" //Include is default
              };
      var kg_filter2_d = new CIMKnowledgeGraphNamedTypeFilterByType()
      {
        NamedType = "D" //Include is default
              };
    
      var kg_filter2_r1 = new CIMKnowledgeGraphNamedTypeFilterByType()
      {
        NamedType = "R1" //Include is default
              };
      var kg_filter2_r3 = new CIMKnowledgeGraphNamedTypeFilterByType()
      {
        NamedType = "R3" //Include is default
              };
    
      var entity_filters2 = new List<CIMKnowledgeGraphNamedTypeFilter>();
      entity_filters2.Add(kg_filter2_a);
      entity_filters2.Add(kg_filter2_b);
      entity_filters2.Add(kg_filter2_c);
      entity_filters2.Add(kg_filter2_d);
    
      var relate_filters2 = new List<CIMKnowledgeGraphNamedTypeFilter>();
      relate_filters2.Add(kg_filter2_r1);
      relate_filters2.Add(kg_filter2_r3);
    
      //var kg_subgraph = ...
      kg_subgraph.EntityFilters = entity_filters2.ToArray();
      kg_subgraph.RelationshipFilters = relate_filters2.ToArray();
    
      //Example 3
      //Exclude all entities from B and C and
      //a subset from D (A is implicitly included)
      //
      //Include all relates from R2 and
      //a subset from R3 (R1 is implicitly excluded)
    
      var kg_filter3_b = new CIMKnowledgeGraphNamedTypeFilterByType();
      var kg_filter3_c = new CIMKnowledgeGraphNamedTypeFilterByType();
      
      kg_filter3_b.NamedType = "B";
              kg_filter3_c.NamedType = "C";
      kg_filter3_b.FilterType = KGFilterType.Exclude;
              kg_filter3_c.FilterType = KGFilterType.Exclude;
    
              //TODO... populate list with uids from "D"...
              var kg_filter3_d = new CIMKnowledgeGraphNamedTypeFilterByInstances();
              kg_filter3_d.NamedType = "D";
              kg_filter3_d.FilterType = KGFilterType.Exclude;
              kg_filter3_d.InstancesIDs = list_of_ids.ToArray();
    
      var kg_filter3_r2 = new CIMKnowledgeGraphNamedTypeFilterByType();
      kg_filter3_r2.NamedType = "R2";//Include is default
    
              //TODO... populate list with uids from "R3"...
              var kg_filter3_r3 = new CIMKnowledgeGraphNamedTypeFilterByInstances();
              kg_filter3_r3.NamedType = "R3";//Include is default
              kg_filter3_r3.InstancesIDs = list_of_ids2.ToArray();
    
      var entity_filters3 = new List<CIMKnowledgeGraphNamedTypeFilter>();
      entity_filters3.Add(kg_filter3_b);//order doesn't matter
      entity_filters3.Add(kg_filter3_c);
      entity_filters3.Add(kg_filter3_d);
    
      var relate_filters3 = new List<CIMKnowledgeGraphNamedTypeFilter>();
      relate_filters3.Add(kg_filter3_r2);//order doesn't matter
      relate_filters3.Add(kg_filter3_r3);
    
      //var kg_subgraph = ...
      kg_subgraph.EntityFilters = entity_filters3.ToArray();
      kg_subgraph.RelationshipFilters = relate_filters3.ToArray();
    
    });
    Requirements

    Target Platforms: Windows 11, Windows 10

    ArcGIS Pro version: 3.6 or higher.
    See Also