public EntitySet <T> Join <TDataRecord>(QueryColumn fromColumn, QueryColumn toColumn) where TDataRecord : DataRecord <TDataRecord>, new() { Argument.Assert.IsNotNull(fromColumn, Argument.Names.fromColumn); Argument.Assert.IsNotNull(toColumn, Argument.Names.toColumn); JoinPredicate joinPredicate = new JoinPredicate(fromColumn, Comparison.Equal, toColumn); QueryTree.Joins.Add(joinPredicate); return(this); }
/// <exception cref="InvalidOperationException">Unable to perform auto join.</exception> private void AutoJoin(TableData toTable) { JoinPredicate predicate = null; int matchCount = 0; foreach (IQueryableColumn column in toTable.Columns) { if (column.ForeignKeyColumn == null) { continue; } IQueryableColumn foreignKeyColumn = column.ForeignKeyColumn; if (!SchemaCompare.ColumnsAreSame(foreignKeyColumn, QueryTree.Table.PrimaryKey)) { continue; } predicate = new JoinPredicate(foreignKeyColumn, Comparison.Equal, column); matchCount++; } foreach (IQueryableColumn column in QueryTree.Table.Columns) { if (column.ForeignKeyColumn == null) { continue; } IQueryableColumn foreignKeyColumn = column.ForeignKeyColumn; if (!SchemaCompare.ColumnsAreSame(foreignKeyColumn, toTable.PrimaryKey)) { continue; } predicate = new JoinPredicate(column, Comparison.Equal, foreignKeyColumn); matchCount++; } // if (predicate == null) // { // // foreach(IQueryableColumn column in toTable.Columns) // { // if(column.ForeignKeyColumn == null) // continue; // // IQueryableColumn foreignKeyColumn = column.ForeignKeyColumn; // foreach (QueryColumn foreignKeyInnerColumn in foreignKeyColumn.Table.Columns) // { // if(!SchemaCompare.ColumnsAreSame(foreignKeyInnerColumn, QueryTree.Table.PrimaryKey)) // continue; // // predicate = new JoinPredicate(foreignKeyInnerColumn, Comparison.Equal, column); // matchCount++; // } // } // // foreach(IQueryableColumn column in QueryTree.Table.Columns) // { // if(column.ForeignKeyColumn == null) // continue; // // IQueryableColumn foreignKeyColumn = column.ForeignKeyColumn; // foreach (QueryColumn foreignKeyinnerColumn in foreignKeyColumn.Table.Columns) // { // if(!SchemaCompare.ColumnsAreSame(foreignKeyinnerColumn, toTable.PrimaryKey)) // continue; // // predicate = new JoinPredicate(column, Comparison.Equal, foreignKeyinnerColumn); // matchCount++; // } // } // } // if (predicate == null) // throw new InvalidOperationException(string.Format("Unable to map table {0}.{1} to table {2}.{3}.", QueryTree.Table.Owner, QueryTree.Table.Name, toTable.Owner, toTable.Name)); if (matchCount > 1) { throw new InvalidOperationException("Multiple potential joins were found. Unable to perform the auto-join operation."); } if (predicate != null) { QueryTree.Joins.Add(predicate); } }
public EntitySet <T> Join <TDataRecord>(JoinPredicate predicate) where TDataRecord : DataRecord <TDataRecord>, new() { QueryTree.Joins.Add(predicate); return(this); }