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)); }