private List <string> ParseJoins(List <JoinModel> joins, long fromTableId) { var joinStrings = joins.Select(join => { var joinToAlias = string.Empty; if (join.ToTable.Id != fromTableId && TablesAlias.ContainsKey(join.ToTable.Id)) { joinToAlias = TablesAlias[join.ToTable.Id]; } else { joinToAlias = GetTableAlias(TablesAlias.Count + 1); TablesAlias.Add(join.ToTable.Id, joinToAlias); } var joinCondition = ParseJoinCondition(join.JoinCondition, TablesAlias[fromTableId], joinToAlias); var lastJoinCondition = joinCondition.LastOrDefault(); if (lastJoinCondition != null) { var resultString = lastJoinCondition.Remove(lastJoinCondition.LastIndexOf(')') + 1); joinCondition[joinCondition.Count - 1] = resultString; } return($"{ join.JoinType.ToString()} join {join.ToTable.ToString()} {joinToAlias} " + $"on {string.Join(" ",joinCondition )} "); }); return(joinStrings.ToList()); }
public QueryConverter(List <TableDataModel> tables) { Tables = tables; int counter = 0; tables.ForEach(table => TablesAlias.Add(table.TableId, GetTableAlias(counter++))); }