Example #1
0
 public RicercaPersonalizzata()
 {
     InitializeComponent();
     Parametri = new ParametriRicercaStrutture();
     valutazioneMinimaComboBox.SelectedIndex  = 0;
     valutazioneMassimaComboBox.SelectedIndex = valutazioneMassimaComboBox.Items.Count - 1;
     InitCitta();
     Parametri.ValutazioneMediaMinima  = int.Parse(valutazioneMinimaComboBox.SelectedItem.ToString());
     Parametri.ValutazioneMediaMassima = int.Parse(valutazioneMassimaComboBox.SelectedItem.ToString());
     Parametri.Citta = cittaComboBox.Text;
 }
        public static List <Struttura> GetStrutture(ParametriRicercaStrutture parametri)
        {
            StringBuilder sottoQueryUno = new StringBuilder("select S.idStruttura, S.indirizzo, S.immagine, S.nome, S.tipo " +
                                                            $"from Strutture S, Citta C " +
                                                            $"where S.idCitta = C.idCitta ");

            if (parametri.Citta != "Tutte le città")
            {
                sottoQueryUno.Append($"and C.nome = '{parametri.Citta}' ");
            }
            if (parametri.TipoStruttura != "Tutti i tipi")
            {
                sottoQueryUno.Append($"and S.tipo = '{parametri.TipoStruttura}' ");
            }
            if (parametri.NomeStruttura != "")
            {
                sottoQueryUno.Append($"and S.nome like '%{parametri.NomeStruttura.Replace("'", "''")}%'");
            }
            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);
            List <Struttura> strutture = new List <Struttura>();

            foreach (DataRow row in table.Rows)
            {
                Struttura struttura = new Struttura()
                {
                    Id               = (int)row["idStruttura"],
                    Indirizzo        = row["indirizzo"].ToString(),
                    Immagine         = ConvertImage(row["immagine"]),
                    Nome             = row["nome"].ToString(),
                    ValutazioneMedia = double.Parse(row["valutazioneMedia"].ToString()),
                    Tipo             = row["tipo"].ToString()
                };
                strutture.Add(struttura);
            }
            return(strutture);
        }