private List <dynamic> CreateCommands(int gemeenteId, DateTime from, DateTime until) { var importGemeenteCommands = new List <ImportMunicipalityFromCrab>(); var importGemeenteHistCommands = new List <ImportMunicipalityFromCrab>(); var importGemeenteNaamCommands = new List <ImportMunicipalityNameFromCrab>(); var importGemeenteNaamHistCommands = new List <ImportMunicipalityNameFromCrab>(); using (var crabEntities = _crabEntitiesFactory()) { var gemeente = GemeenteQueries.GetTblGemeentesByGemeenteIds(crabEntities, new HashSet <int> { gemeenteId }).SingleOrDefault(); var gemeenteHists = GemeenteQueries.GetTblGemeenteHistByGemeenteByGemeente(crabEntities, gemeente); var namen = GemeenteQueries.GetTblGemeenteNamenById(crabEntities, gemeente.gemeenteId); var namenHists = GemeenteQueries.GetTblGemeenteNamenHistById(crabEntities, gemeente.gemeenteId); importGemeenteHistCommands.AddRange(MunicipalityMappings.GetCommandsFromGemeenteHist(gemeenteHists).ToList()); importGemeenteCommands.Add(MunicipalityMappings.GetCommandFromGemeente(gemeente)); importGemeenteNaamHistCommands.AddRange(MunicipalityMappings.GetCommandsFromGemeenteNaamHist(namenHists).ToList()); importGemeenteNaamCommands.AddRange(MunicipalityMappings.GetCommandsFromGemeenteNaam(namen).ToList()); } var firstCommand = importGemeenteCommands .Concat(importGemeenteHistCommands) .OrderBy(x => x.Timestamp) .First(); var allCommands = importGemeenteHistCommands.Select(x => Tuple.Create <dynamic, int>(x, 0)) .Concat(importGemeenteCommands.Select(x => Tuple.Create <dynamic, int>(x, 1))) .Concat(importGemeenteNaamHistCommands.Select(x => Tuple.Create <dynamic, int>(x, 2))) .Concat(importGemeenteNaamCommands.Select(x => Tuple.Create <dynamic, int>(x, 3))); return(new[] { firstCommand }.Concat(allCommands .Where(x => x.Item1.Timestamp > from.ToCrabInstant() && x.Item1.Timestamp <= until.ToCrabInstant() && !x.Item1.Equals(firstCommand)) .OrderBy(x => x.Item1.Timestamp) .ThenBy(x => x.Item2) .Select(x => x.Item1)) .ToList()); }
private List <dynamic> CreateCommands(int streetNameId, DateTime from, DateTime until) { var streetNameCommands = new List <ImportStreetNameFromCrab>(); var streetNameHistCommands = new List <ImportStreetNameFromCrab>(); var streetNameStatusCommands = new List <ImportStreetNameStatusFromCrab>(); var streetNameStatusHistCommands = new List <ImportStreetNameStatusFromCrab>(); using (var context = _crabEntitiesFactory()) { string primaryLanguage, secondaryLanguage, nisCode; var straatnaam = StraatnaamQueries.GetTblStraatnaamByStraatnaamId(streetNameId, context); var straatnaamHist = StraatnaamQueries.GetTblStraatnaamHistByStraatnaamId(streetNameId, context); var gemeenteIds = straatnaamHist .Select(s => s.GemeenteId) .ToList(); if (straatnaam != null) { primaryLanguage = straatnaam.tblGemeente.taalcode; secondaryLanguage = straatnaam.tblGemeente.taalCodeTweedeTaal; nisCode = straatnaam.tblGemeente.NISCode; streetNameCommands.Add(StreetNameMappings.GetCommandFor(straatnaam, primaryLanguage, secondaryLanguage, nisCode)); gemeenteIds.Add(straatnaam.GemeenteId); } else { var gemeente = GemeenteQueries.GetTblGemeentesByGemeenteIds(context, new HashSet <int> { straatnaamHist.First().GemeenteId }).First(); primaryLanguage = gemeente.taalcode; secondaryLanguage = gemeente.taalCodeTweedeTaal; nisCode = gemeente.NISCode; } gemeenteIds = gemeenteIds.Distinct().ToList(); if (gemeenteIds.Count > 2) { throw new NotImplementedException(); } streetNameHistCommands.AddRange(StreetNameMappings.GetCommandsFor(straatnaamHist, primaryLanguage, secondaryLanguage, nisCode)); streetNameStatusCommands.AddRange(StreetNameMappings.GetCommandsFor(StraatnaamQueries.GetTblStraatnaamStatusByStraatnaamId(streetNameId, context))); streetNameStatusHistCommands.AddRange(StreetNameMappings.GetCommandsFor(StraatnaamQueries.GetTblStraatnaamStatusHistByStraatnaamId(streetNameId, context))); } var commandsByStreetnaam = streetNameCommands .Concat(streetNameHistCommands) .OrderBy(x => x.Timestamp) .GroupBy(g => (int)g.StreetNameId) .ToDictionary(x => x.Key, x => x.ToList()); var commands = new List <dynamic>(); foreach (var streetNameCommand in commandsByStreetnaam) { commands.Add(streetNameCommand.Value.OrderBy(x => x.Timestamp).First()); } var allStreetNameCommands = streetNameHistCommands.Select(x => Tuple.Create <dynamic, int>(x, 0)) .Concat(streetNameCommands.Select(x => Tuple.Create <dynamic, int>(x, 1))) .Concat(streetNameStatusHistCommands.Select(x => Tuple.Create <dynamic, int>(x, 2))) .Concat(streetNameStatusCommands.Select(x => Tuple.Create <dynamic, int>(x, 3))) .Where(x => x.Item1.Timestamp > from.ToCrabInstant() && x.Item1.Timestamp <= until.ToCrabInstant()) .OrderBy(x => x.Item1.Timestamp) .ThenBy(x => x.Item2) .ToList(); foreach (var command in allStreetNameCommands) { commands.Add(command.Item1); } return(commands); }