2011-01-09 39 views
0

在我的应用程序中,用户可以定义搜索条件。他可以选择一个列,设置一个操作符(等于,大于,小于或等于等)并给出值。在用户点击一个按钮后,应用程序应该根据条件对数据库进行搜索。我使用NHibernate,现在问我,用NHibernate做到这一点的最有效的方法是什么。NHibernate - 定义条件

我应该创建一个查询它像(柱=名称,运算符=一样,值=%约翰%)

 var a = session.CreateCriteria<Customer>(); 
     a.Add(Restrictions.Like("Name", "%John%")); 
     return a.List<Customer>(); 

或者我应该这样做与HQL:

 var q = session.CreateQuery("from Customer where " + where); 
     return q.List<Customer >(); 

或者有没有更好的解决方案?

感谢您的帮助。

最好的问候,托马斯

+0

我敢肯定,如果你接受人们的答案,有人会帮助你。 – Phill 2011-01-09 12:50:44

+0

嗨Phill - 我只是没有看到,我必须标记接受的答案。现在我已经为其他问题做了这个。我认为,这会增加接受率? - 还是有更多的事情要做?谢谢! – BennoDual 2011-01-09 12:52:46

回答

0

您可以使用其中任何一个。两者之间可能几乎没有区别。但是无论你如何确保列名都是常量或映射到列名,否则你的仓库将与你的模型定义紧密结合,即如果你更新了列名,你将不得不去更新这些语句。

而当你建立where子句使得你有一个附加正确查询的函数。你可能会有相同的switch case语句。

0

在效率方面没有区别。在HQL版本中,我宁愿使用参数,而不是将where部分添加为字符串。 如果您使用的是NH3.0,则可以考虑使用QueryOver以避免使用字符串来描述您的属性