或许有更好的方法。
我正在为NHibernate构建一个动态查询生成器,我们不希望直接将HQL放入应用程序中,而是尽可能地保持ORM的通用性。当前它看起来像这样:
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);
}
好的,很棒,但是......有两个问题:
这个查询只处理“and”,我的初步想法是编写一个方法来动态构建字典,该方法接受属性名称、值和运算符“and”或“or”,并构建字典以及运算符数组。这听起来像是正确的做法吗?
好的,这很好用,但是当出现整数时会失败,因为有单引号。我认为最好的方式是让字典接受
<T.Property, string>
然后反射到 T.Property 找到数据类型并进行相应的操作。我是否过于复杂了?
谢谢。