public string GetQueryText(Expression expression)
        {
            var translator             = this.Translate(expression);
            IEnumerable <string> parts = new []
            {
                Prefix.Collection2String(Dyno.Prefixes.Concat(translator.Prefixes)),
                translator.WithClause != null?translator.WithClause.ToString() : null,
                    translator.DeleteClause != null ? "DELETE "
                    + translator.DeleteClause.ToString(Dyno.AutoQuotation, Dyno.SkipTriplesWithEmptyObject, false)
                            : string.Empty,
                    translator.InsertClause != null ? "INSERT "
                    + translator.InsertClause.ToString(Dyno.AutoQuotation, Dyno.SkipTriplesWithEmptyObject, false)
                            : string.Empty,
                    translator.UsingClause != null?translator.UsingClause.ToString() : null,
                        UsingNamed.Collection2String(translator.UsingNamedClause),
                        !string.IsNullOrEmpty(translator.SelectClause) ? "SELECT " + translator.SelectClause : string.Empty,
                        translator.FromClause != null?translator.FromClause.ToString() : null,
                            FromNamed.Collection2String(translator.FromNamedClause),
                            translator.WhereClause != null ? "WHERE "
                            + translator.WhereClause.ToString(Dyno.AutoQuotation, Dyno.SkipTriplesWithEmptyObject, false)
                            : string.Empty,

                            translator.GroupByClause,
                            translator.HavingClause,
                            translator.OrderByClause,
                            translator.LimitClause.ToString(),
                            translator.OffsetClause.ToString()
            };

            string query = string.Join(Environment.NewLine, parts.Where(part => !string.IsNullOrEmpty(part)));

            return(query);
        }