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

JoinDescription Class
Represents a mechanism to create a Join object.
Object Model
JoinDescription ClassQueryFilter ClassRelationshipClass ClassSelection Class
Syntax
public sealed 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