//依據名稱,取得region或section的id public static string GetLocationIdByName(string name) { var locationEntity = LocationJson.GetInstance(); var region = locationEntity.regionEntity.region.FirstOrDefault(x => x.txt == name); if (region != null) { return(region.id); } foreach (var reg in locationEntity.regionEntity.region) { foreach (var section in reg.section) { if (section.name == name) { return(section.id); } } } throw new InvalidSettingException("Cannot find name in Region.json name:" + name); }
public static string GetLocationIdById(string Id) { var locationEntity = LocationJson.GetInstance(); var region = locationEntity.regionEntity.region.FirstOrDefault(x => x.id == Id); if (region != null) { return(region.id); } foreach (var reg in locationEntity.regionEntity.region) { foreach (var section in reg.section) { if (section.id == Id) { return(section.id); } } } throw new InvalidSettingException("Cannot find id in Region.json id:" + Id); }
public static string GetMrtIdById(string Id) { var locationEntity = LocationJson.GetInstance(); foreach (var mrt in locationEntity.mrtEntity.mrts) { foreach (var mrtline in mrt.mrtline) { if (mrtline.sid == Id) { return(mrtline.sid); } foreach (var station in mrtline.station) { if (station.nid == Id) { return(station.nid); } } } } throw new InvalidSettingException("Cannot find id in MrtRegionId.json id:" + Id); }
public List <Region> ConvertFilterConditionToRegionList(RegionCondition condition) { //取出region跟mrt對照表 var locationEntity = LocationJson.GetInstance(); if (condition.Region.Count == 0 && condition.mrtcoods.Count == 0 && condition.Section.Count == 0) { throw new InvalidSettingException("Please choose Region or MrtCoods or Section in settings.conf"); } //取出所選擇的縣市 var regionList = locationEntity.regionEntity.region .ToList() .DeepClone <List <Region> >(); for (int i = regionList.Count - 1; i >= 0; i--) { var currentRegion = regionList[i]; //如果搜尋條件有指定此縣市底下的鄉鎮 if (condition.Section.Intersect(currentRegion.section.Select(x => x.id)).Any()) { //移除其他沒被指定到的鄉鎮 currentRegion.section.RemoveAll(x => !condition.Section.Contains(x.id)); } else { //如果沒指定代表全選,刪掉所有鄉鎮,這樣才不會loop到 currentRegion.section.Clear(); } //如果這縣市有捷運 再做捷運站判斷 if (currentRegion.mrt != null) { if (condition.mrtcoods.Count > 0) { //loop每個捷運線 for (int k = currentRegion.mrt.mrtline.Count - 1; k >= 0; k--) { //如果有選擇此捷運線的捷運站,刪掉其他沒選擇到的捷運站 var currentMrtLine = currentRegion.mrt.mrtline[k]; if (condition.mrtcoods.Intersect(currentMrtLine.station.Select(x => x.nid)).Any()) { currentMrtLine.station.RemoveAll(x => !condition.mrtcoods.Contains(x.nid)); } else { //刪掉此捷運線 currentRegion.mrt.mrtline.Remove(currentMrtLine); } } //代表選擇的捷運站不在此捷運底下 if (currentRegion.mrt.mrtline.Count == 0) { currentRegion.mrt = null; } } else { //沒選捷運站 直接拿掉此region的捷運 currentRegion.mrt = null; } } //如果沒有選擇此region,又沒有選在這region底下的捷運或鄉鎮,就刪掉這個region if (currentRegion.section.Count == 0 && currentRegion.mrt == null && !condition.Region.Contains(currentRegion.id)) { regionList.Remove(currentRegion); } } return(regionList); }