O forse c'è un modo migliore.Posso passare in T.Property? Inoltre, idee per migliorare questo metodo?
Sto costruendo un generatore di query dinamico per NHibernate, non vogliamo mettere HQL direttamente nell'applicazione, lo vogliamo come agnostico ORM possibile. Ecco come si presenta attualmente:
public override IEnumerable<T> SelectQuery(Dictionary<string, string> dictionary)
{
string t = Convert.ToString(typeof (T).Name);
string criteria = string.Empty;
foreach (KeyValuePair<string, string> item in dictionary)
{
if (criteria != string.Empty)
criteria += " and ";
criteria += item.Key + " = '" + item.Value + "'";
}
string query = " from " + t;
if (criteria != string.Empty)
query += " where " + criteria;
return FindByHql(query);
}
ok, grande, tuttavia .... ci sono due cose qui dentro che pongono un problema:
Questa query solo maniglie "e," il mio primo il pensiero è di passare è costruire un metodo per costruire dinamicamente il dizionario che prende il nome della proprietà, il valore e un operatore "e" o "o" e costruisce il dizionario insieme a un array di operatori. Suona come la cosa giusta da fare?
Ok, quindi, questo funziona GRANDE, tuttavia, quando c'è un intero fallisce a causa delle virgolette singole. Quello che penso sarebbe il modo migliore è avere il dizionario accetta
<T.Property, string>
e quindi riflettere in T.Property per trovare il tipo di dati e comportarsi di conseguenza. Sono troppo complicato?
Grazie.
Ho usato questo, tranne che ho fatto via con il Dizionario tutti insieme e solo aggiunto "Proprietà" come stringa alla classe QueryObject. Grazie! Le query sui criteri –