NHibernate - 使用Criteria API对整数列进行LIKE搜索的最简单方法?

时间:2009-08-05 03:37:38

标签: nhibernate nhibernate-criteria

我正在尝试对整数列进行搜索,我需要做的是将列实际转换为varchar,然后执行类似的搜索。这可能吗?使用Criteria API最简单的方法是什么?

var search = "123";
criteria.Add(Restrictions.Like("Number", "%" + search + "%"))

1 个答案:

答案 0 :(得分:24)

如果Number是一个字符串,那么很容易:

.Add(Restrictions.Like("Number", "some_value",MatchMode.Anywhere))

由于你有一个数字,NHibernate将检查Number的类型,如果你给它一个字符串,它将抛出异常。

不确定为什么NH团队没有使用object作为参数和MatchMode参数提供重载....

无论如何,你仍然可以这样做:

.Add(Expression.Sql("{alias}.Number like ?", "%2%", NHibernateUtil.String))

修改

关于别名:

(我找不到文档谈论这个的地方,但这是我对它的理解)

{alias}返回NH内部用于最新CreateCriteria的别名。所以如果你有:

session.CreateCriteria<User>("firstAlias")
       .CreateCriteria("firstAlias.Document", "doc")
       .Add(Expression.Sql("{alias}.Number like ?", "%2%",  
                           NHibernateUtil.String)).List<User>();
在这种情况下,

{alias}将是'doc' - 所以你最终会得到:doc.Number。

因此,请始终在需要使用其别名的CreateCriteria之后使用{alias}。