private static void UpdateIncludeSelectAndProcessToNodes( IncludeNode graphNode, IDbSelect includedSelect, IModelInfoProvider infoProvider, IDbObjectFactory dbFactory, UniqueNameGenerator nameGenerator, AbstractMethodTranslator[] addons) { // create temp table var entityRef = includedSelect.GetReturnEntityRef(); var returnTable = (IDbTable)entityRef.Referee; var newIncludedSelect = dbFactory.BuildSelect(returnTable); newIncludedSelect.From.Alias = nameGenerator.GenerateAlias(newIncludedSelect, returnTable.TableName); var tempTableName = TranslationConstants.TempTablePreix + nameGenerator.GenerateAlias(null, returnTable.TableName, true); var tempTable = dbFactory.BuildTempTable(tempTableName, includedSelect); var tempSelect = dbFactory.BuildSelect(tempTable); tempSelect.From.Alias = nameGenerator.GenerateAlias(tempSelect, tempTable.TableName); var joinToTemp = MakeJoin(newIncludedSelect, tempSelect, dbFactory, nameGenerator); var joinTo = joinToTemp.To; newIncludedSelect.Joins.Add(joinToTemp); foreach (var pk in returnTable.PrimaryKeys) { var fromPkCol = dbFactory.BuildColumn(entityRef, pk.Name, pk.ValType); includedSelect.Selection.Add(fromPkCol); var toPkCol = dbFactory.BuildColumn(tempSelect.From, pk.Name, pk.ValType); tempSelect.Selection.Add(toPkCol); tempSelect.GroupBys.Add(toPkCol); toPkCol = dbFactory.BuildColumn(joinTo, pk.Name, pk.ValType); var binary = dbFactory.BuildBinary(fromPkCol, DbOperator.Equal, toPkCol); joinToTemp.Condition = joinToTemp.Condition.UpdateBinary(binary, dbFactory); } var orderCol = dbFactory.BuildColumn(tempSelect.From, tempTable.RowNumberColumnName, typeof(int)); tempSelect.Selection.Add(orderCol); orderCol = dbFactory.BuildColumn(joinTo, tempTable.RowNumberColumnName, typeof(int)); newIncludedSelect.OrderBys.Add(orderCol); graphNode.Select = newIncludedSelect; graphNode.TempTable = tempTable; foreach (var toNode in graphNode.ToNodes) { TranslateGraphNode(toNode, infoProvider, dbFactory, nameGenerator, addons); } }