HQL“包含”语句如何?

时间:2009-02-08 15:26:21

标签: nhibernate hql contains icriteria

我有一个实体,它有一个名为Tags的字符串属性。我想根据某个字符串是否位于Tags属性中来查询此实体。

因此,例如,我将有一个函数IList GetEntityByTag(string tag),这将返回所有在其“Tags”属性中具有tag值的Entity。

我尝试了ICriteria方法...... Expression.In(PropertyName,Value),但这恰恰相反。我需要像Expression.In(Value,PropertyName)这样的东西。

也许IQuery会是一个更好的策略,但我无法为Property CONTAINS'abc'找到任何类型的HQL语句。

任何帮助或方向都非常感谢!

2 个答案:

答案 0 :(得分:3)

如果您想知道标签是否属于Tags属性中的子字符串,您可能需要考虑以下提示:

  • 您可能希望先将要搜索的字符串和搜索字符串转换为小写字母。 Expression.ilike为您做到这一点。分数。
  • 要确定您的搜索字词是否在字段中的任何位置,可以将ilike函数中的MatchMode参数设置为MatchMode.ANYWHERE。

如前所述,如果

  

让我们说我的财产,'标签'=   A; B; C; d; e。我想知道'a'   存在于标签中。将   Expression.Like(“Tags”,“a”)返回   真?

如果'a; b; c; d; e'是一个字符串,Expression.ilike(“Tags”,“a”,MatchMode.ANYWHERE)将返回true。

答案 1 :(得分:0)

你的意思是Expression.Like(PropertyName,Value)?