ArcGIS Pro 3.4 API Reference Guide
ArcGIS.Core.Data Namespace / JoinDescription Class
Members Example

In This Topic
    JoinDescription Class
    In This Topic
    Represents a mechanism to create a Join object.
    Object Model
    JoinDescription ClassQueryFilter ClassRelationshipClass ClassSelection Class
    Syntax
    public sealed class JoinDescription 
    Public NotInheritable Class JoinDescription 
    Example
    Joining a file geodatabase feature class to an Oracle database query layer feature class with a virtual relationship class
    public async Task JoiningFileGeodatabaseFeatureClassToOracleQueryLayer()
    {
        await ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(() =>
        {
            using (Geodatabase geodatabase = new Geodatabase(new FileGeodatabaseConnectionPath(new Uri("C:\\Data\\LocalGovernment.gdb"))))
            using (Database database = new Database(new DatabaseConnectionProperties(EnterpriseDatabaseType.Oracle)
            {
                AuthenticationMode = AuthenticationMode.DBMS,
                Instance = "instance",
                User = "user",
                Password = "password",
                Database = "database"
            }))
    
            using (FeatureClass leftFeatureClass = geodatabase.OpenDataset<FeatureClass>("Hospital"))
            using (Table rightTable = database.OpenTable(database.GetQueryDescription("FacilitySite")))
            {
                Field originPrimaryKey = leftFeatureClass.GetDefinition().GetFields().FirstOrDefault(field => field.Name.Equals("facilityId"));
                Field destinationForeignKey = rightTable.GetDefinition().GetFields().FirstOrDefault(field => field.Name.Equals("hospitalID"));
    
                VirtualRelationshipClassDescription description = new VirtualRelationshipClassDescription(
            originPrimaryKey, destinationForeignKey, RelationshipCardinality.OneToOne);
    
                using (RelationshipClass relationshipClass = leftFeatureClass.RelateTo(rightTable, description))
                {
                    JoinDescription joinDescription = new JoinDescription(relationshipClass)
                    {
                        JoinDirection = JoinDirection.Forward,
                        JoinType = JoinType.LeftOuterJoin
                    };
    
                    Join join = new Join(joinDescription);
    
                    using (Table joinedTable = join.GetJoinedTable())
                    {
                        // Perform operation on joined table.
                    }
                }
            }
        });
    }
    Joining two tables from different geodatabases
    public async Task JoinTablesFromDifferentGeodatabases()
    {
        await ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(() =>
        {
            using (Geodatabase sourceGeodatabase = new Geodatabase(new FileGeodatabaseConnectionPath(new Uri("Path \\ to \\Geodatabase \\ one"))))
            using (Geodatabase destinationGeodatabase = new Geodatabase(new FileGeodatabaseConnectionPath(new Uri("Path \\ to \\Geodatabase \\ two"))))
            using (Table sourceTable = sourceGeodatabase.OpenDataset<Table>("State"))
            using (Table destinationTable = destinationGeodatabase.OpenDataset<Table>("Cities"))
            {
                Field primaryKeyField = sourceTable.GetDefinition().GetFields().FirstOrDefault(field => field.Name.Equals("State.State_Abbreviation"));
                Field foreignKeyField = destinationTable.GetDefinition().GetFields().FirstOrDefault(field => field.Name.Equals("Cities.State"));
    
                VirtualRelationshipClassDescription virtualRelationshipClassDescription = new VirtualRelationshipClassDescription(primaryKeyField, foreignKeyField, RelationshipCardinality.OneToMany);
    
                using (RelationshipClass relationshipClass = sourceTable.RelateTo(destinationTable, virtualRelationshipClassDescription))
                {
                    JoinDescription joinDescription = new JoinDescription(relationshipClass)
                    {
                        JoinDirection = JoinDirection.Forward,
                        JoinType = JoinType.InnerJoin,
                        TargetFields = sourceTable.GetDefinition().GetFields()
                    };
    
                    using (Join join = new Join(joinDescription))
                    {
                        Table joinedTable = join.GetJoinedTable();
    
                        //Process the joined table. For example ..
                        using (RowCursor cursor = joinedTable.Search())
                        {
                            while (cursor.MoveNext())
                            {
                                using (Row row = cursor.Current)
                                {
                                    // Use Row
                                }
                            }
                        }
                    }
                }
            }
        });
    }
    Inheritance Hierarchy

    System.Object
       ArcGIS.Core.Data.JoinDescription

    Requirements

    Target Platforms: Windows 11, Windows 10

    ArcGIS Pro version: 3 or higher.
    See Also