NHibernate, utilizzo di liste comma separated per clausola WHERE IN – setParameter

Nota: Articoli etichettati come Snippet non contengono codice completo ma solo parti di esso, recuperate da appunti. Per cui, potrebbe essere necessario modificarne alcuni nomi o indici. Per ogni chiarimento, lasciate un commento all’articolo.

Se vi è la necessità di utilizzare, all’interno di una query HQL (Hibernate Query Language), la clausola “WHERE qualcosa IN”, Nhibernate fornisce la possibilità di utilizzare (anche per questo caso) le query parametriche, ovvero di evitare la creazione di query mediante concatenazione del testo.

Esempio:/* Lista di id: 3, 5, 9 */

— Concatenazione — Metodo poco elegante e poco “object oriented”

string listaId = “3, 5, 9”;  // Stringa creata mediante funzioni di concatenazione, es: string.join(…)
string myQuery = “UPDATE Assegnazione a SET a.qtaRendere = null WHERE a.id IN (” + listaId + “)”;

— Query parametrica — Bel metodo!

ArrayList listaIdAssegnazioni = new ArrayList();
listaIdAssegnazioni.Add((int)mle.idAssegnazione);  //Ripetuta per ogni id!

string myQuery = “UPDATE Assegnazione a SET a.qtaRendere = null WHERE a.id IN (:elencoId)”;
var qry = [ISession].CreateQuery(myQuery);  //con [ISession] si intende l’oggetto di tipo ISession già creato precedentemente
qry.SetParameterList(“elencoId”, listaIdAssegnazioni.ToArray(typeof(int)));
qry.ExecuteUpdate();

 

Annunci

, ,

  1. Lascia un commento

Rispondi

Effettua il login con uno di questi metodi per inviare il tuo commento:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: