1.
IWorkspaceFactory2 workspaceFactory = new ShapefileWorkspaceFactoryClass() as IWorkspaceFactory2; IWorkspace workspace = workspaceFactory.OpenFromFile(@"E:", 0); IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspace; IFeatureClass featureClass = featureWorkspace.OpenFeatureClass(“a”); IFeatureClass featureClass2 = featureWorkspace.OpenFeatureClass( "b"); AddJoin aj = new AddJoin(); aj.in_field = "ID"; aj.in_layer_or_view = featureClass2; // @"E:jhl" + Functions.g_ROAD + "_SpatialJoin"; aj.join_field = "FID"; aj.join_table = @"E:a.shp"; //aj.out_layer_or_view = Functions.g_ROAD + "_SpatialJoin"; aj.join_type = "KEEP_ALL"; Geoprocessor gp = new Geoprocessor(); //gp.OverwriteOutput = true; gp.Execute(aj, null);
2.
//// Build a memory relationship class. Type memRelClassFactoryType =Type.GetTypeFromProgID("esriGeodatabase.MemoryRelationshipClassFactory"); IMemoryRelationshipClassFactory memRelClassFactory = (IMemoryRelationshipClassFactory)Activator.CreateInstance(memRelClassFactoryType); IRelationshipClass relationshipClass = memRelClassFactory.Open("a", featureClass2, "ID", (IObjectClass)featureClass, "FID", "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);
3.
// Create the query definition. IQueryDef queryDef = featureWorkspace.CreateQueryDef(); // Provide a list of tables to join. queryDef.Tables = "a,b"; queryDef.Tables += ""; // Set the subfields and the WhereClause (in this case, the join condition). queryDef.SubFields = "*"; queryDef.WhereClause = "a.ID = b.FID + 1"; // Make the new TableQueryName. IQueryName2 queryName2 = (IQueryName2)new TableQueryNameClass(); queryName2.QueryDef = queryDef; queryName2.PrimaryKey = "ID"; queryName2.CopyLocally = true; IDataset workspaceDataset = (IDataset)featureWorkspace; IWorkspaceName workspaceName = (IWorkspaceName)workspaceDataset.FullName; // Set the workspace and name of the new QueryTable. IDatasetName datasetName = (IDatasetName)queryName2; datasetName.WorkspaceName = workspaceName; datasetName.Name = "Join"; // Open the virtual table. IName name = (IName)queryName2; ITable table = (ITable)name.Open();