private ParametriRicercaStrutture GetParametri() { ParametriRicercaStrutture parametri = new ParametriRicercaStrutture() { NomeStruttura = nomeStruttura.Text.ToLower(), TipoStruttura = tipoStruttura.ItemsSource[tipoStruttura.SelectedIndex].ToString(), Citta = citta.ItemsSource[citta.SelectedIndex].ToString(), IsFiltroPosizioneAttivo = false }; if (parametri.Citta == "Posizione corrente") { parametri.IsFiltroPosizioneAttivo = true; parametri.DistanzaMinima = double.Parse(distanzaMinimaEntry.Text); parametri.DistanzaMassima = double.Parse(distanzaMassimaEntry.Text); } if (componentiValutazioneAttivi.IsToggled) { if (valutazioneMediaMinimaPicker.SelectedIndex == 0) { parametri.ValutazioneMediaMinima = 0; } else { parametri.ValutazioneMediaMinima = (int)valutazioneMediaMinimaPicker.ItemsSource[valutazioneMediaMinimaPicker.SelectedIndex]; } if (valutazioneMediaMassimaPicker.SelectedIndex == 0) { parametri.ValutazioneMediaMassima = 0; } else { parametri.ValutazioneMediaMassima = (int)valutazioneMediaMassimaPicker.ItemsSource[valutazioneMediaMassimaPicker.SelectedIndex]; } } else { parametri.ValutazioneMediaMinima = 0; parametri.ValutazioneMediaMassima = 5; } return(parametri); }
private async void EventCercaClicked(object sender, EventArgs e) { if (!CheckDistanzaEntries() || !CheckValutazioneMediaPickers()) { await DisplayAlert("Errore", "Parametri di ricerca inseriti non corretti", "Ok"); } else { try { Location posizione = await GetCurrentLocation(); ParametriRicercaStrutture parametri = GetParametri(); parametri.PosizioneCorrente = posizione; luoghiTrovati.Parametri = parametri; await Navigation.PushAsync(luoghiTrovati); } catch (Exception) { await DisplayAlert("Errore", "Impossibile trovare la posizione corrente", "Ok"); } } }
public static List <Struttura> GetLuoghiTrovati(ParametriRicercaStrutture parametri) { StringBuilder sottoQueryUno = new StringBuilder($"select S.idStruttura, S.nome, S.immagine, S.tipo, S.latitudine, " + $"S.longitudine, S.descrizione, C.nome as nomeCitta " + $"from Strutture S, Citta C " + $"where S.idCitta = C.idCitta "); if (!(parametri.NomeStruttura is null)) { sottoQueryUno.Append($"and lower(S.Nome) like '%{parametri.NomeStruttura.Replace("'", "''")}%' "); } if (parametri.TipoStruttura != "Qualsiasi struttura") { sottoQueryUno.Append($"and S.Tipo = '{parametri.TipoStruttura}' "); } if (parametri.Citta != "Posizione corrente") { sottoQueryUno.Append($"and C.Nome = '{parametri.Citta}' "); } StringBuilder sottoQueryDue = new StringBuilder($"select S.idStruttura, CAST(ISNULL(avg(CAST(TMP.valutazione as DECIMAL(10, 2))), 0) as DECIMAL(10, 2)) as valutazioneMedia " + "from Strutture S left outer join " + "(select * " + "from Recensioni R " + "where R.stato = 'approvato') TMP on S.idStruttura = TMP.idStruttura " + "group by S.idStruttura"); string query = "select * " + $"from ({sottoQueryUno}) TMP1, ({sottoQueryDue}) TMP2 " + $"where TMP1.idStruttura = TMP2.idStruttura and " + $"TMP2.valutazioneMedia >= {parametri.ValutazioneMediaMinima} and TMP2.valutazioneMedia <= {parametri.ValutazioneMediaMassima};"; DataTable table = EseguiComando(query); if (parametri.IsFiltroPosizioneAttivo) { return(FiltraStrutturePerDistanza(parametri.PosizioneCorrente, table, parametri.DistanzaMinima, parametri.DistanzaMassima)); } return(GetLuoghiTrovatiDaDataTable(parametri.PosizioneCorrente, table)); }