コード例 #1
0
        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);
        }
コード例 #2
0
        /// <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);
            }
        }
コード例 #3
0
 public EntitySet <T> Join <TDataRecord>(JoinPredicate predicate) where TDataRecord : DataRecord <TDataRecord>, new()
 {
     QueryTree.Joins.Add(predicate);
     return(this);
 }