或者可能有更好的方法。我可以通过T.Property吗?另外,改进这种方法的想法?
我正在为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);
}
OK,很好,但是....有在这里两件事情会引发问题:
这个查询只处理“和”我最初的思想是通过构建一个方法来动态构建带有属性名称,值和运算符“and”或“or”的字典,并与运算符数组一起构建字典。这听起来像是正确的事情吗?
好吧,所以,这个工程伟大,但是,当有一个整数,它因为单引号失败。我认为最好的方法是让字典接受
<T.Property, string>
,然后反映到T.Property中查找数据类型并相应地执行。我是否过分复杂呢?
谢谢。
我用这个只是我废除了解释一起,只是增加了“财产”字符串到QueryObject类。谢谢! – 2009-06-18 16:34:37