Say I have the two attached tables that I want to join together in code using the "J_Fld". As you can see, it is a one-to-many join and there will be one row in the left table that does not have a match in the right table. I want to get a result that returns "all-results" like the join options in ArcMap (so include the one without a relationship). If I used a QueryDefinition I get everything but the one without a relationship.The API has code for a IRelationshipClass:// Build a memory relationship class. Type memRelClassFactoryType = Type.GetTypeFromProgID( "esriGeodatabase.MemoryRelationshipClassFactory"); IMemoryRelationshipClassFactory memRelClassFactory = (IMemoryRelationshipClassFactory)Activator.CreateInstance(memRelClassFactoryType) ; IRelationshipClass relationshipClass = memRelClassFactory.Open("ParcelsOwners", parcelsFeatureClass, "PARCEL_ID", (IObjectClass)ownersTable, "PARCEL_ID", "Is Owned By", "Owns", esriRelCardinality.esriRelCardinalityOneToOne); // Open the RelQueryTable as a feature class. Type rqtFactoryType = Type.GetTypeFromProgID("esriGeodatabase.RelQueryTableFactory"); IRelQueryTableFactory rqtFactory = (IRelQueryTableFactory)Activator.CreateInstance (rqtFactoryType); ITable relQueryTable = (ITable)rqtFactory.Open(relationshipClass, false, null, null, String.Empty, false, false);
If I change the cardinality to "esriRelCardinalityManyToMany" the return table only has 4 rows in it. It looks like no matter what it returns a one-to-one and takes a "first case wins" approach.I was thinking the way to go about it is IRelationshipClass.GetRelationshipForObject, but it doesn't seem to like being passed a table row as an object.Any ideas?