O posiblemente hay una manera mejor.¿Puedo pasar T.Property? Además, ¿ideas para mejorar este método?
Estoy creando un generador de consultas dinámicas para NHibernate, no queremos poner HQL directamente en la aplicación, queremos que sea lo más independiente de ORM posible. Parece que este momento:
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);
}
bien, grande, sin embargo .... hay dos cosas aquí que plantean un problema:
Esta consulta sólo mangos "y" mi inicial el pensamiento es aprobar es construir un método para construir dinámicamente el diccionario que toma el nombre de la propiedad, el valor y un operador "y" o "o" y crea el diccionario junto con una serie de operadores. ¿Eso suena como lo correcto para hacer?
Ok, entonces, esto funciona EXCELENTE, sin embargo, cuando hay un número entero falla debido a las comillas simples. Lo que creo que sería la MEJOR manera es hacer que el diccionario acepte
<T.Property, string>
y luego reflexionar en T.Property para encontrar el tipo de datos y comportarse de acuerdo con esto. ¿Estoy complicando esto?
Gracias.
He utilizado este excepto que acabó con el Diccionario todos juntos y acaba de agregar "propiedad" como cadena a la clase QueryObject. ¡Gracias! –