在我的应用程序中,用户可以定义搜索条件。他可以选择一个列,设置一个运算符(等于,大于,小于或等于等)并给出值。用户单击按钮后,应用程序应使用条件搜索数据库。我使用NHibernate并且现在问我,用NHibernate做这个的效率最高的方法是什么。
我应该用它创建一个查询(Column = Name,Operator = Like,Value =%John%)
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 :(得分:0)
就效率而言,没有区别。在HQL版本中,我更喜欢使用参数而不是将where部分添加为字符串。 如果您使用的是NH3.0,您也可以考虑使用QueryOver,以避免使用字符串来描述您的属性
答案 1 :(得分:0)
您可以使用其中任何一个。两者之间可能几乎没有差异。但无论你做什么,都要确保你的列名是常量或映射到列名,否则你的存储库将紧密耦合到你的模型定义,即如果你更新列名,你必须自己更新这些语句。
当你构建where子句时,你有一个附加正确查询的函数。你可能会有一个switch case语句。