public void UpdateLinksFromTableJoins() { // direct populate FromTableLinks NeedRedrawLinks = true; SelectedQuery.FromTableLinks = new List <TableLink>(); foreach (var fj in SelectedQuery.FromTableJoins.Where(f => !f.IsDeleted)) { var join = fj.Source; var pt = SelectedQuery.FromTables.First(t => t.Alias == join.LeftObjectAlias); var pk = pt.Properties.First(p => p.Name == join.LeftField); var pkIndex = pt.Properties.IndexOf(pk); var ft = SelectedQuery.FromTables.First(t => t.Alias == join.RightObjectAlias); var fk = ft.Properties.First(p => p.Name == join.RightField); var fkIndex = ft.Properties.IndexOf(fk); var link = new TableLink { PrimaryRefId = GenerateObjectId("table_primary", pt.Id, pkIndex), ForeignRefId = GenerateObjectId("table_foreign", ft.Id, fkIndex), Source = join }; SelectedQuery.FromTableLinks.Add(link); } }
public void RegenerateTableLinks() { FromTableLinks = new List <TableLink>(); var joins = GenerateJoins(); var newJoins = joins.Where(j => !FromTableJoins.Any(f => f.Source.GetJoinString() == j.GetJoinString())); FromTableJoins.AddRange(newJoins.Select(j => new TableJoinModel { Source = j, JoinType = "Inner" })); var lostJoins = FromTableJoins.Where(j => !FromTables.Any(t => t.Alias == j.Source.LeftObjectAlias) || !FromTables.Any(t => t.Alias == j.Source.RightObjectAlias)); FromTableJoins = FromTableJoins.Except(lostJoins).ToList(); foreach (var fj in FromTableJoins.Where(f => !f.IsDeleted)) { var join = fj.Source; var pt = FromTables.First(t => t.Alias == join.LeftObjectAlias); var pk = pt.Properties.First(p => p.StoreProperty.Name == join.LeftField); var pkIndex = pt.Properties.IndexOf(pk); var ft = FromTables.First(t => t.Alias == join.RightObjectAlias); var fk = ft.Properties.First(p => p.StoreProperty.Name == join.RightField); var fkIndex = ft.Properties.IndexOf(fk); var link = new TableLink { PrimaryRefId = GenerateObjectId("table_primary", pt.Id, pkIndex), ForeignRefId = GenerateObjectId("table_foreign", ft.Id, fkIndex), Source = join }; FromTableLinks.Add(link); } }