private static void OrderAreaIds() { using (var db = new TransportContext()) { var i = 0; foreach (var area in db.Areas.ToList()) { if (area.AreaId != i) { // сдвигаем var areaRoutes = db.AreaRoutes.Where(ar => ar.OriginId == area.AreaId || ar.DestinationId == area.AreaId) .ToList(); db.AreaRoutes.RemoveRange(areaRoutes); foreach (var building in db.Buildings.Where(b => b.AreaId == area.AreaId)) { building.AreaId = null; } foreach (var busstop in db.Busstops.Where(bs => bs.AreaId == area.AreaId)) { busstop.AreaId = null; } db.Areas.Remove(area); db.SaveChanges(); foreach (var areaRoute in areaRoutes) { if (areaRoute.OriginId == area.AreaId) areaRoute.OriginId = i; if (areaRoute.DestinationId == area.AreaId) areaRoute.DestinationId = i; } area.AreaId = i; db.Areas.Add(area); db.AreaRoutes.AddRange(areaRoutes); foreach (var building in db.Buildings.Where(b => b.AreaId == null)) { building.AreaId = i; } foreach (var busstop in db.Busstops.Where(bs => bs.AreaId == null)) { busstop.AreaId = i; } db.SaveChanges(); } i++; } } }
public TRequestsController(TransportContext context) { _context = context; if (_context.TRequest.Count() == 0) { // Create a new TodoItem if collection is empty, // which means you can't delete all TodoItems. _context.TRequest.Add(new TRequest { CreatedDateTime = DateTime.Now, UserId = 1, CustomPurpose = "test", ModifiedDateTime = DateTime.Now, ModifiedUserId = 1, NeededDateTime = DateTime.Now, RequestApproveStatusId = 1, RequestBy = 1, RequestDescription = "test", RequestedDate = DateTime.Now, RequestPurposeId = 1, ReturnDateTime = DateTime.Now, StatusId = 3 }); _context.SaveChanges(); } }
/// <summary> /// расчет количества людей в зоне /// </summary> private static void CountPeopleInAreas() { const double squarePerPerson = 22.8; // площадь на одного человека const double livingSpacePercentage = 0.875; var purposes = new[] { "Жилой дом", "Жилой дом с административными помещениями", "Частный дом", "Таунхаус", "Коттедж" }; using (var db = new TransportContext()) { var pb = new ProgressBar(db.Areas.Count() - 1, "Расчет людей, проживающих в зонах"); var p = 0; foreach (var area in db.Areas.Include(a => a.Buildings)) { var sum = 0; foreach (var b in area.Buildings) { if (purposes.Contains(b.Purpose) && b.Levels > 0 && b.Square > 0) { int levels = b.Purpose == "Жилой дом с административными помещениями" ? b.Levels - 1 : b.Levels; sum += (int)(b.Square * levels * livingSpacePercentage / squarePerPerson); } } area.People = sum; pb.Report(++p); } pb.Pause(); Console.WriteLine(Environment.NewLine + "Сохраняем в БД..."); db.SaveChanges(); Console.WriteLine($"Суммарное количетсов жителей: {db.Areas.Sum(a => a.People)}"); } }
static void ClearDatabase() { using (var transportCtx = new TransportContext()) { if (!transportCtx.Addresses.Any() && !transportCtx.Buildings.Any() && !transportCtx.Busstops.Any() && !transportCtx.OrgFils.Any() && !transportCtx.OrgRubs.Any() && !transportCtx.Orgs.Any()) { return; } Console.Write("Очистка данных БД... "); transportCtx.Addresses.RemoveRange(transportCtx.Addresses); transportCtx.Buildings.RemoveRange(transportCtx.Buildings); transportCtx.Busstops.RemoveRange(transportCtx.Busstops); transportCtx.Orgs.RemoveRange(transportCtx.Orgs); transportCtx.OrgFils.RemoveRange(transportCtx.OrgFils); transportCtx.OrgRubs.RemoveRange(transportCtx.OrgRubs); transportCtx.SaveChanges(); Console.WriteLine("завершено"); } }
/// <summary> /// Заполняем площади пропущенных домов /// </summary> private static void SetAreaToBuildings() { using (var db = new TransportContext()) { var purpose = "Жилой дом"; var buildingsWithoutArea = db.Buildings.Include(b => b.Addresses) .Where(b => b.Addresses.Any() && Math.Abs(b.Square) < 0.1 && b.Purpose.StartsWith(purpose) && b.Levels > 2) .OrderBy(b => b.AreaId); var totalBWA = buildingsWithoutArea.Count(); var currentBWA = 0; foreach (var building in buildingsWithoutArea.ToList()) { currentBWA++; var firstAddr = building.Addresses.First(); Clipboard.SetText($"{firstAddr.Street} {firstAddr.Number}"); double area; string areaStr; do { Console.Write($"{currentBWA}/{totalBWA}\t{firstAddr.Street}, {firstAddr.Number}. Площадь: "); areaStr = Console.ReadLine(); } while (!Double.TryParse(areaStr, out area)); building.Square = area; db.SaveChanges(); } Console.WriteLine("Сохраняем в БД..."); } }
/// <summary> /// Поменять lat и lon у полигонов /// </summary> private static void SwitchLatLon() { using (var db = new TransportContext()) { var buildingsWithPolygon = db.Buildings.Where(b => b.Polygon != null); var progress = new ProgressBar(buildingsWithPolygon.Count(), "Перерасчет площадей... "); var indx = 0; foreach (var building in buildingsWithPolygon) { // для каждого полигона внутри building.Polygon var polyTexts = building.Polygon.AsText() .Split(new[] { ")), ((", "), (" }, StringSplitOptions.RemoveEmptyEntries); DbGeography polygon = null; foreach (var polyText in polyTexts) { var matches = Regex.Matches(polyText, @"(?:\d*\.)?\d+"); polygon = polygon == null ? GeoUtils.CreatePolygon(matches.Cast<Match>().Select(m => m.Value)) : polygon.Union(GeoUtils.CreatePolygon(matches.Cast<Match>().Select(m => m.Value))); } building.Polygon = polygon; building.Square = polygon?.Area ?? 0; progress.Report(indx++); } progress.Pause(); Console.WriteLine("Сохраняем в БД..."); db.SaveChanges(); } }
static void CopyBusstops() { using (var dgis = new DGisContext("Томск")) { using (var transportCtx = new TransportContext()) { Console.Write("Копирование остановок... "); var dgisBusstops = dgis.Busstops.GetAll(); foreach (var dgisBusstop in dgisBusstops) { if (dgisBusstop.Name.Contains("(трамвай)")) { continue; } transportCtx.Busstops.Add(new Busstop { Name = dgisBusstop.Name, Location = GeoUtils.CreatePoint(dgisBusstop.PosY, dgisBusstop.PosX) }); } transportCtx.SaveChanges(); Console.WriteLine("завершено"); } } }
private static void SaveCurrentResults() { Console.Write("Выполняется сохранение данных:\r\n" + "Словарь соответствий названий улиц... "); using (var writer = new StreamWriter(@"correspStreet.txt", true)) { foreach (var correspStr in _correspondenceStreetNames.Skip(_correspStrCount)) { writer.WriteLine($"{correspStr.Key};{correspStr.Value}"); } _correspStrCount = _correspondenceStreetNames.Count; } Console.Write("Выполнено\r\nСловарь соответствий адресов..."); using (var writer = new StreamWriter(@"correspAddr.txt", true)) { foreach (var correspAddr in _correspondenceAddresses.Skip(_correspAddrCount)) { writer.WriteLine($"{correspAddr.Key};{correspAddr.Value}"); } _correspAddrCount = _correspondenceAddresses.Count; } Console.Write("Выполнено\r\nДанные в БД... "); _db.SaveChanges(); Console.Write("Выполнено"); }
/// <summary> /// Добавление расстояний между зонами /// </summary> private static void AddRoutes() { using (var db = new TransportContext()) { while (true) { Console.Write("***Введите идентификатор начальной зоны: "); var input = Console.ReadLine(); int originId; if (Int32.TryParse(input, out originId) && originId != 0) { var origin = db.Areas.Find(originId); if (origin == null) continue; Console.WriteLine($"Введите построчно идентификатор зоны и расстояние до нее от {origin.Name} (enter - закончить)"); do { input = Console.ReadLine(); var destIdDist = input.Split(new[] { ' ', ',', ';' }, StringSplitOptions.RemoveEmptyEntries); if (destIdDist.Length == 2) { int destId; int distance; if (Int32.TryParse(destIdDist[0], out destId) && Int32.TryParse(destIdDist[1], out distance) && originId != destId) { var dest = db.Areas.Find(destId); var areaRoute = new AreaRoutes { OriginId = originId, DestinationId = destId, Distance = distance }; db.AreaRoutes.Add(areaRoute); try { db.SaveChanges(); Console.WriteLine($"Путь от {origin.Name} до {dest.Name} равный {distance} сохранен"); } catch (DbUpdateException e) { db.AreaRoutes.Remove(areaRoute); Console.WriteLine("Дублирование записи, повторите ввод"); } } else { Console.WriteLine("Ошибка ввода"); } } } while (input != String.Empty); } else break; } } }
static void ReturnAddresses() { using (var db = new TransportContext()) { using (var dgis = new DGisContext("Томск")) { var query = db.Buildings.Include(b => b.Addresses).Where(b => !b.Addresses.Any()); var progress = new Common.ProgressBar(query.Count(), "Восстанавливаем адреса... "); var current = 0; foreach (var buildingNoAddr in query) { progress.Report(current++); DGis.Domain.Entities.Building dgisBuilding; try { dgisBuilding = dgis.Buildings.GetBuilingByCoords(buildingNoAddr.Location.Latitude.Value, buildingNoAddr.Location.Longitude.Value); } catch (InvalidOperationException e) { continue; } if (dgisBuilding == null) { continue; } foreach (var addressesId in dgisBuilding.AddressesIds) { var dgisAddress = dgis.Addresses.GetById(addressesId); buildingNoAddr.Addresses.Add(new Address { Number = dgisAddress.Number, Street = dgisAddress.Street, BuildingId = buildingNoAddr.BuildingId }); } } progress.Pause(); } Console.WriteLine("\r\nСохраняем в БД"); db.SaveChanges(); } }
private static void CountDepArrPcs() { Console.WriteLine("Расчет количества людей прибывающих и отправляющихся из зоны"); using (var db = new TransportContext()) { var sumPeople = db.Areas.Sum(a => a.People); var sumOrgs = db.OrgFils.Count(); foreach (var area in db.Areas.Include(a => a.Buildings.Select(b => b.OrgFils))) { area.DeparturePct = (double)area.People / sumPeople; var orgsInArea = area.Buildings.SelectMany(b => b.OrgFils).Count(); area.ArrivalPct = (double)orgsInArea / sumOrgs; } db.SaveChanges(); } }
/// <summary> /// Заполняем площади киосков средним зачением /// </summary> private static void SetAvgKioskArea() { using (var db = new TransportContext()) { var types = new[] { "Киоск" }; var avgArea = db.Buildings.Where(b => Math.Abs(b.Square) > 0.1 && types.Contains(b.Purpose)).Average(b => b.Square); Console.WriteLine($"Выполнить заполнение площадей киосков средней площадью = {avgArea.ToString("F3")}? (Y/N): "); var key = Console.ReadKey(true); if (key.Key != ConsoleKey.Y) return; foreach (var building in db.Buildings.Where(b => Math.Abs(b.Square) < 0.1 && types.Contains(b.Purpose))) { building.Square = avgArea; } db.SaveChanges(); } }
/// <summary> /// Создаем обратный путь между остановками /// </summary> private static void AddReturnWay() { var noroute = new[,] { { 87, 11}, { 246, 16}, { 195, 21}, { 249, 27}, { 104, 32}, { 212, 60}, { 102, 60}, { 110, 62}, { 204, 87}, { 258, 87}, { 150, 87}, { 195, 90}, { 27, 104}, { 56, 110}, { 119, 123}, { 262, 119}, { 110, 119}, { 229, 127}, { 130, 129}, { 129, 144}, { 258, 150}, { 194, 264}, { 123, 195}, { 261, 242}, { 245, 258}, { 260, 253} }; using (var db = new TransportContext()) { foreach (var areaRoute in db.AreaRoutes.ToList()) { // если обратного пути нет if (!db.AreaRoutes.Any(ar => ar.OriginId == areaRoute.DestinationId && ar.DestinationId == areaRoute.OriginId)) { // если путь в списке к удалению, то пропускаем var skipRoute = false; for (var i = 0; i < noroute.GetLength(0); i++) { if (noroute[i, 0] == areaRoute.OriginId && noroute[i, 1] == areaRoute.DestinationId) { skipRoute = true; break; } } if (skipRoute) continue; // добавляем новый обратный маршрут db.AreaRoutes.Add(new AreaRoutes { OriginId = areaRoute.DestinationId, DestinationId = areaRoute.OriginId, Distance = areaRoute.Distance }); } } db.SaveChanges(); } }
static void CopyBuildings() { using (var dgis = new DGisContext("Томск")) { using (var transportCtx = new TransportContext()) { Console.Write("Копирование зданий... "); var dgisBuildings = dgis.Buildings.GetAll(); foreach (var dgisBuilding in dgisBuildings) { var building = new Building { Location = GeoUtils.CreatePoint(dgisBuilding.PosY, dgisBuilding.PosX), Levels = dgisBuilding.Levels, PostIndex = dgisBuilding.PostIndex, Purpose = dgisBuilding.Purpose, }; foreach (var addressesId in dgisBuilding.AddressesIds) { var dgisAddress = dgis.Addresses.GetById(addressesId); building.Addresses.Add(new Address { Number = dgisAddress.Number, Street = dgisAddress.Street, Building = building }); } transportCtx.Buildings.Add(building); } transportCtx.SaveChanges(); Console.WriteLine("завершено"); } } }
public static void RemoveItemById(TransportType transportType, TransportContext db, int id) { retry: try { if ((transportType == TransportType.car && db.Cars.Count() != 0) || (transportType == TransportType.plane && db.Planes.Count() != 0)) { switch (transportType) { case TransportType.car: var carForDeletion = db.Cars.Find(id); // у тебя есть метод GetItemById. зачем он? я думаю, что именно для этого db.Cars.Remove(carForDeletion); break; case TransportType.plane: var planeForDeletion = db.Planes.Find(id); // у тебя есть метод GetItemById. зачем он? я думаю, что именно для этого db.Planes.Remove(planeForDeletion); break; } db.SaveChanges(); } else { Log.ConsoleLog(ConsoleColor.Yellow, $"Sorry, there is no {transportType} in DataBase."); } } catch (Exception exception) { Log.WriteDataToFile(@"..\..\Log.txt", exception.ToString()); Log.ConsoleLog(ConsoleColor.Green, exception.ToString()); goto retry; } }
/// <summary> /// Группировка зданий по зонам /// </summary> private static void GroupBuildingToAreas() { using (var db = new TransportContext()) { // ищем ближайшие зоны для каждого здания var sw = Stopwatch.StartNew(); var buildings = db.Buildings.Where(b => b.AreaId == null); var pb = new ProgressBar(buildings.Count() - 1, "Группировка зданий по зонам... "); var p = 0; foreach (var building in buildings) { var minDistance = double.MaxValue; long minAreaId = 0; sw = Stopwatch.StartNew(); foreach (var area in db.Areas) { var curDistance = area.Location.Distance(building.Location) ?? 0; if (curDistance < minDistance) { minAreaId = area.AreaId; minDistance = curDistance; } } if (minAreaId != 0) { building.AreaId = minAreaId; } pb.Report(++p); } pb.Pause(); db.SaveChanges(); Console.WriteLine(Environment.NewLine + $"Группировка зданий заняла {sw.Elapsed.TotalSeconds} сек."); } }
/// <summary> /// Ручное объединение двух остановок /// </summary> private static void UniteBusstops() { using (var db = new TransportContext()) { int id1, id2; Console.Write(Environment.NewLine + "Введите Id зон для объединения: "); var input = Console.ReadLine(); var idsArr = input?.Split(new[] { ' ', ',', ';' }, StringSplitOptions.RemoveEmptyEntries); if (idsArr != null && idsArr.Length == 2 && Int32.TryParse(idsArr[0], out id1) && Int32.TryParse(idsArr[1], out id2)) { var area1 = db.Areas.Include(a => a.Busstops).FirstOrDefault(a => a.AreaId == id1); var area2 = db.Areas.Include(a => a.Busstops).FirstOrDefault(a => a.AreaId == id2); if (area1 == null || area2 == null) return; var newAreaBs = area1.Busstops.ToList(); newAreaBs.AddRange(area2.Busstops); Console.WriteLine("Создать новую зону со списком остановок:"); newAreaBs.ForEach(b => Console.WriteLine($"{b.BusstopId}. {b.Name}")); Console.Write("Y/N: "); if (Console.ReadKey().Key == ConsoleKey.Y) { var uniteArea = area1; uniteArea.Name = GetAreaName(newAreaBs); // добавление остановок newAreaBs.ForEach(b => uniteArea.Busstops.Add(b)); // расчет центра uniteArea.Location = CalculateAreaCentre(newAreaBs); db.Areas.Remove(area2); db.SaveChanges(); } } } }
private static void DeleteReturnWay() { var noroute = new[,] { { 87, 11}, { 246, 16}, { 195, 21}, { 249, 27}, { 104, 32}, { 212, 60}, { 102, 60}, { 110, 62}, { 204, 87}, { 258, 87}, { 150, 87}, { 195, 90}, { 27, 104}, { 56, 110}, { 119, 123}, { 262, 119}, { 110, 119}, { 229, 127}, { 130, 129}, { 129, 144}, { 258, 150}, { 194, 264}, { 123, 195}, { 261, 242}, { 245, 258}, { 260, 253} }; using (var db = new TransportContext()) { for (var i = 0; i < noroute.GetLength(0); i++) { var origin = noroute[i, 0]; var dest = noroute[i, 1]; var route = db.AreaRoutes.FirstOrDefault(ar => ar.OriginId == origin && ar.DestinationId == dest); if (route == null) continue; db.AreaRoutes.Remove(route); } db.SaveChanges(); } }
public static void CommandHandler(TransportType transportType, int choice, TransportContext db) { switch (choice) { case 1: var id = Misc.GetId(transportType, db); RemoveItemById(transportType, db, id); break; case 2: AddNewDefaultItem(transportType, db); break; case 3: AddNewCustomItem(transportType, db); break; case 4: id = Misc.GetId(transportType, db); GetItemById(transportType, db, id); break; } db.SaveChanges(); }
/// <summary> /// Удаление остановок по идентификаторам /// </summary> private static void DeleteBusStopsById() { Console.WriteLine("Удаление остановок по идентификаторам"); using (var db = new TransportContext()) { int idForDel; do { Console.Write(Environment.NewLine + "Введите Id остановки для удаления: "); var input = Console.ReadLine(); if (Int32.TryParse(input, out idForDel) && idForDel != 0) { var bs = db.Busstops.Find(idForDel); if (bs == null) continue; Console.Write($"Удалить остановку: \"{bs.BusstopId}. {bs.Name}\" (Y/N)? "); if (Console.ReadKey().Key == ConsoleKey.Y) { db.Busstops.Remove(bs); db.SaveChanges(); } } } while (idForDel != 0); } }
public void CreateAllocation(RequestAllocation requestAllocStr) { _context.RequestAllocation.Add(requestAllocStr); _context.SaveChanges(); }
static void CopyOrgs() { using (var dgis = new DGisContext("Томск")) { using (var transportCtx = new TransportContext()) { Console.Write("Копирование категорий предприятий... "); var dgisOrgRubs1 = dgis.OrgRubs1.GetAll(); var orgRubs = new List <OrgRub>(); foreach (var orgRub1 in dgisOrgRubs1) { orgRubs.Add(new OrgRub { Name = orgRub1.Name, ParentOrgRub = null }); } var dgisOrgRubs2 = dgis.OrgRubs2.GetAll(); foreach (var orgRub2 in dgisOrgRubs2) { if (orgRubs.Any(rub => rub.Name == orgRub2.Name)) { continue; } var parentRubName = dgis.OrgRubs1.GetById(orgRub2.OrgRub1Id).Name; orgRubs.Add(new OrgRub { Name = orgRub2.Name, ParentOrgRub = orgRubs.FirstOrDefault(rub => rub.Name == parentRubName) }); } var dgisOrgRubs3 = dgis.OrgRubs3.GetAll(); foreach (var orgRub3 in dgisOrgRubs3) { if (orgRubs.Any(rub => rub.Name == orgRub3.Name)) { continue; } var parentRubName = dgis.OrgRubs2.GetById(orgRub3.OrgRub2Id).Name; orgRubs.Add(new OrgRub { Name = orgRub3.Name, ParentOrgRub = orgRubs.FirstOrDefault(rub => rub.Name == parentRubName) }); } transportCtx.OrgRubs.AddRange(orgRubs); transportCtx.SaveChanges(); Console.WriteLine("завершено"); Console.Write("Копирование предприятий... "); var dgisOrgs = dgis.Orgs.GetAll(); foreach (var dgisOrg in dgisOrgs) { var org = new Org { Name = dgisOrg.Name, }; foreach (var orgRubs3Id in dgisOrg.OrgRubs3Ids) { var dgisOrgRub3 = dgis.OrgRubs3.GetById(orgRubs3Id); var orgRub = transportCtx.OrgRubs.FirstOrDefault(rub => rub.Name == dgisOrgRub3.Name); if (orgRub == null) { continue; } org.OrgRubs.Add(orgRub); } foreach (var dgisOrgFil in dgisOrg.OrgFils) { var orgFil = new OrgFil { Org = org }; foreach (var addressesId in dgisOrgFil.AddressesIds) { var dgisAddress = dgis.Addresses.GetById(addressesId); if (dgisAddress.BuildingId == null) { continue; } var address = transportCtx.Addresses.FirstOrDefault(addr => addr.Number == dgisAddress.Number && addr.Street == dgisAddress.Street); if (address == null) { continue; } orgFil.BuildingId = address.BuildingId; break; } if (orgFil.BuildingId == 0) { continue; } org.OrgFils.Add(orgFil); } transportCtx.Orgs.Add(org); } transportCtx.SaveChanges(); Console.WriteLine("завершено"); } } }
/// <summary> /// Автоматическое объединение остановок /// </summary> private static void AggregateBusstops() { using (var db = new TransportContext()) { Console.Write("Очистка зон.. "); foreach (var busstop in db.Busstops) { busstop.AreaId = null; } foreach (var building in db.Buildings) { building.AreaId = null; } db.Areas.RemoveRange(db.Areas); db.SaveChanges(); Console.WriteLine("завершено"); Console.Write("Группировка остановок в остановочные пункты... "); // Этап 1. Группируем остановки с одинаковыми названиями var busstopGroups = db.Busstops.GroupBy(busstop => busstop.Name); var areas = new List<Area>(); foreach (var group in busstopGroups) { var area = new Area(); area.Name = @group.Key; @group.ToList().ForEach(busstop => area.Busstops.Add(busstop)); area.Location = CalculateAreaCentre(area.Busstops.ToList()); areas.Add(area); } // Этап 2. Объединяем остановочные пункты, которые находятся близко друг к другу const double maxDistance = 250.0; var delAreas = new List<Area>(); foreach (var area in areas) { if (delAreas.Contains(area)) continue; var nearestAreas = areas.Where(bs => area != bs && !delAreas.Contains(bs) && area.Location.Distance(bs.Location) < maxDistance).ToList(); foreach (var nearestArea in nearestAreas) { area.Name += $"/{nearestArea.Name}"; nearestArea.Busstops.ToList().ForEach(busstop => area.Busstops.Add(busstop)); area.Location = CalculateAreaCentre(area.Busstops.ToList()); } delAreas.AddRange(nearestAreas); } delAreas.ForEach(busstation => areas.Remove(busstation)); var i = 1; foreach (var area in areas) { area.AreaId = i++; } db.Areas.AddRange(areas); db.SaveChanges(); } Console.WriteLine("завершено"); Console.ReadKey(); }
/// <summary> /// Ручное разделение остановок на две /// </summary> private static void DivideBusstop() { using (var db = new TransportContext()) { int idForDiv; Console.Write(Environment.NewLine + "Введите Id зоны для разделения: "); var input = Console.ReadLine(); if (Int32.TryParse(input, out idForDiv) && idForDiv != 0) { var area = db.Areas.Include(a => a.Busstops).FirstOrDefault(a => a.AreaId == idForDiv); if (area == null) return; foreach (var busstop in area.Busstops) { Console.WriteLine($"{busstop.BusstopId}. {busstop.Name}"); } Console.WriteLine("Введите идентификаторы остановок для новой зоны: "); input = Console.ReadLine(); var bsIds = input.Split(new[] { ' ', ',', ';' }, StringSplitOptions.RemoveEmptyEntries); var newAreaBs = new List<Busstop>(); foreach (var bsId in bsIds) { int id; if (!Int32.TryParse(bsId, out id)) continue; var bs = area.Busstops.FirstOrDefault(b => b.BusstopId == id); if (bs == null) continue; newAreaBs.Add(bs); } Console.WriteLine("Создать новую зону со списком остановок:"); newAreaBs.ForEach(b => Console.WriteLine($"{b.BusstopId}. {b.Name}")); Console.Write("Y/N: "); if (Console.ReadKey().Key == ConsoleKey.Y) { // создание новой зоны var newArea = new Area { AreaId = db.Areas.Max(a => a.AreaId) + 1, Name = GetAreaName(newAreaBs) }; // добавление/исключение остановок newAreaBs.ForEach(b => { newArea.Busstops.Add(b); area.Busstops.Remove(b); }); // расчет центра newArea.Location = CalculateAreaCentre(newAreaBs); // обработка предыдущей зоны // изменение имени area.Name = GetAreaName(area.Busstops.ToList()); // пересчет центра area.Location = CalculateAreaCentre(area.Busstops.ToList()); db.Areas.Add(newArea); db.SaveChanges(); } } } }
public void CreateRequest(TRequest requestStr) { _context.TRequest.Add(requestStr); _context.SaveChanges(); }