private void GenerateSchema(SelectStatement statement, ISource origin, SchemaMember member)
        {
            if (member.Ancestors != null)
            {
                foreach (var ancestor in member.Ancestors)
                {
                    origin = statement.Join(origin, ancestor, member.Path);
                }
            }

            if (member.Token.Property.IsComplex)
            {
                var complex = (IEntityComplexPropertyMetadata)member.Token.Property;

                //一对多的导航属性对应一个新语句(新语句别名即为该导航属性的全称)
                if (complex.Multiplicity == AssociationMultiplicity.Many)
                {
                    var slave = new SelectStatement(complex.Foreign, member.FullPath)
                    {
                        Paging = member.Paging
                    };
                    var table = slave.Table;

                    if (complex.ForeignProperty != null)
                    {
                        if (complex.ForeignProperty.IsSimplex)
                        {
                            slave.Select.Members.Add(slave.Table.CreateField(complex.ForeignProperty));
                        }
                        else
                        {
                            table = (TableIdentifier)slave.Join(slave.Table, (IEntityComplexPropertyMetadata)complex.ForeignProperty).Target;
                        }
                    }

                    statement.Slaves.Add(slave);

                    //为一对多的导航属性增加必须的链接字段及对应的条件参数
                    foreach (var link in complex.Links)
                    {
                        var principalField = origin.CreateField(link.Principal);
                        principalField.Alias = "$" + member.FullPath + ":" + link.Name;
                        statement.Select.Members.Add(principalField);

                        var foreignField = slave.Table.CreateField(link.Foreign);
                        foreignField.Alias = null;
                        if (slave.Where == null)
                        {
                            slave.Where = Expression.Equal(foreignField, slave.Parameters.Add(link.Name, link.Foreign.Type));
                        }
                        else
                        {
                            slave.Where = Expression.AndAlso(slave.Where,
                                                             Expression.Equal(foreignField, slave.Parameters.Add(link.Name, link.Foreign.Type)));
                        }
                    }

                    //为导航属性增加约束过滤条件
                    if (complex.Constraints != null && complex.Constraints.Length > 0)
                    {
                        foreach (var constraint in complex.Constraints)
                        {
                            slave.Where = Expression.AndAlso(slave.Where,
                                                             Expression.Equal(
                                                                 table.CreateField(constraint.Name),
                                                                 complex.GetConstraintValue(constraint)));
                        }
                    }

                    if (member.Sortings != null)
                    {
                        this.GenerateSortings(slave, table, member.Sortings);
                    }

                    if (member.HasChildren)
                    {
                        foreach (var child in member.Children)
                        {
                            this.GenerateSchema(slave, table, child);
                        }
                    }

                    return;
                }

                //对于一对一的导航属性,创建其关联子句即可
                origin = statement.Join(origin, complex, member.FullPath);

                //确保导航属性的外链表的主键都在
                if (member.HasChildren)
                {
                    foreach (var key in complex.Foreign.Key)
                    {
                        if (!member.Children.Contains(key.Name))
                        {
                            member.Append(new SchemaMember(key));
                        }
                    }
                }
            }
            else
            {
                var field = origin.CreateField(member.Token.Property);

                //只有数据模式元素是导航子元素以及与当前语句的别名不同(相同则表示为同级),才需要指定字段引用的别名
                if (member.Parent != null && !string.Equals(member.Path, statement.Alias, StringComparison.OrdinalIgnoreCase))
                {
                    if (string.IsNullOrEmpty(statement.Alias))
                    {
                        field.Alias = member.FullPath;
                    }
                    else
                    {
                        field.Alias = Zongsoft.Common.StringExtension.TrimStart(member.FullPath, statement.Alias + ".", StringComparison.OrdinalIgnoreCase);
                    }
                }

                statement.Select.Members.Add(field);
            }

            if (member.HasChildren)
            {
                foreach (var child in member.Children)
                {
                    this.GenerateSchema(statement, origin, child);
                }
            }
        }