public IActionResult Search(MoonSearchModel model) { if (!ModelState.IsValid) { return(Search()); } MoonSearchQuery query = new MoonSearchQuery() { SystemName = model.SystemName, OreName = model.OreName, OreClassId = _repoOre.GetOreClassId(model.OreTier), Percentage = model.Percentage }; List <Sector> results = _repoWorld.Search(query); return(View("SearchResults", results)); }
// Search Functions public List <Sector> Search(MoonSearchQuery query) { Dictionary <string, Sector> result = new Dictionary <string, Sector>(); List <Sector> list = new List <Sector>(); int switch0 = 1; int switch1 = 1; int switch2 = 1; int switch3 = 1; string systemName = ""; string oreName = ""; int oreClassId = 0; int percentage = 0; if (query.SystemName != null && query.SystemName != "") { switch0 = 0; systemName = query.SystemName; } if (query.OreName != "Any") { switch1 = 0; oreName = query.OreName; } if (query.OreClassId > 0) { switch2 = 0; oreClassId = query.OreClassId; } if (query.Percentage > 0) { switch3 = 0; percentage = query.Percentage; } using (SqlConnection connection = new SqlConnection(GetConnectionString())) { using (SqlCommand command = new SqlCommand("Search", connection)) { command.CommandType = CommandType.StoredProcedure; connection.Open(); command.Parameters.AddWithValue("@Switch0", switch0); command.Parameters.AddWithValue("@Switch1", switch1); command.Parameters.AddWithValue("@Switch2", switch2); command.Parameters.AddWithValue("@Switch3", switch3); command.Parameters.AddWithValue("@System", systemName); command.Parameters.AddWithValue("@Ore", oreName); command.Parameters.AddWithValue("@OreClassId", oreClassId); command.Parameters.AddWithValue("@Percentage", percentage); using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { string sectorName = reader["System"].ToString(); int planetNumber = (int)reader["Planet"]; int moonNumber = (int)reader["Moon"]; string oreType = reader["Ore"].ToString(); int percent = (int)reader["Percentage"]; string oreClass = reader["OreClass"].ToString(); Sector sector = null; Planet planet = null; Moon moon = null; if (result.ContainsKey(sectorName)) { sector = result[sectorName]; } else { sector = new Sector(sectorName); result[sectorName] = sector; } if (sector.Planets.ContainsKey(planetNumber)) { planet = sector.Planets[planetNumber]; } else { planet = new Planet(planetNumber); sector.Planets[planetNumber] = planet; } if (planet.Moons.ContainsKey(moonNumber)) { moon = planet.Moons[moonNumber]; } else { moon = new Moon(moonNumber); planet.Moons[moonNumber] = moon; } moon.AddOre(new OreType(oreType, oreClass), ((double)percent) / 100); } } } } foreach (var item in result) { list.Add(item.Value); } return(list); }