Ejemplo n.º 1
0
        internal override SqlAlias VisitAlias(SqlAlias a)
        {
            SqlTable tab = a.Node as SqlTable;
            SqlTableValuedFunctionCall tvf = a.Node as SqlTableValuedFunctionCall;

            if (this.addPrimaryKeys && (tab != null || tvf != null))
            {
                List <SqlOrderExpression> list = new List <SqlOrderExpression>();

                bool     isTable = tab != null;
                MetaType rowType = isTable ? tab.RowType : tvf.RowType;
                foreach (MetaDataMember mm in rowType.IdentityMembers)
                {
                    string           name = mm.MappedName;
                    SqlColumn        col;
                    Expression       sourceExpression;
                    List <SqlColumn> columns;

                    if (isTable)
                    {
                        col = tab.Find(name);
                        sourceExpression = tab.SourceExpression;
                        columns          = tab.Columns;
                    }
                    else
                    {
                        col = tvf.Find(name);
                        sourceExpression = tvf.SourceExpression;
                        columns          = tvf.Columns;
                    }

                    if (col == null)
                    {
                        col       = new SqlColumn(mm.MemberAccessor.Type, typeProvider.From(mm.MemberAccessor.Type), name, mm, null, sourceExpression);
                        col.Alias = a;
                        columns.Add(col);
                    }
                    list.Add(new SqlOrderExpression(SqlOrderType.Ascending, new SqlColumnRef(col)));
                }

                this.PrependOrderExpressions(list);

                return(a);
            }
            else
            {
                return(base.VisitAlias(a));
            }
        }