private static void BuildOrderByList(StringBuilder builder, List <SortAttribute> sortAttributes)
        {
            if (sortAttributes?.Count > 0)
            {
                var translator = new AttributeTranslator();
                builder.Append("\norder by ");

                var orderBy = sortAttributes
                              .Select(x => new { x.Direction, Attribute = translator.FriendlyToReal(x.AttributeName) })
                              .ToList();

                foreach (var attribute in orderBy)
                {
                    builder.Append("\"");
                    builder.Append(attribute.Attribute.TableName);
                    builder.Append("\".\"");
                    builder.Append(attribute.Attribute.ColumnName);
                    builder.Append("\"");

                    builder.Append(attribute.Direction switch
                    {
                        SortDirection.Ascending => " asc",
                        SortDirection.Descending => " desc",
                        _ => throw new NotImplementedException()
                    });
        public DbQuery Translate(Query query)
        {
            if (query.SelectAttributes.Count == 0)
            {
                throw new ArgumentException();
            }

            var builder             = new StringBuilder();
            var attributeTranslator = new AttributeTranslator();
            var attributes          = query.SelectAttributes
                                      .Select(attributeTranslator.FriendlyToReal)
                                      .ToList();

            BuildSelectList(builder, attributes);
            BuildFromPart(builder, attributes);
            BuildJoinList(builder, attributes);

            Dictionary <string, object> parameters = new Dictionary <string, object>();

            if (query.Conditions?.Count > 0)
            {
                builder.Append("\nwhere");

                var conditionTranslator = _conditionTranslatorFactory.Create(builder);
                conditionTranslator.Translate(query.Conditions);

                parameters = conditionTranslator.Parameters;
            }

            BuildOrderByList(builder, query.SortAttributes);
            builder.Append(";");

            return(new DbQuery(builder.ToString(), parameters));
        }