我正在尝试对一个整数列进行类似搜索,我需要做的是将该列转换为varchar,然后执行like搜索。这可行吗?使用Criteria API最简单的方法是什么?
var search = "123";
criteria.Add(Restrictions.Like("Number", "%" + search + "%"))
我正在尝试对一个整数列进行类似搜索,我需要做的是将该列转换为varchar,然后执行like搜索。这可行吗?使用Criteria API最简单的方法是什么?
var search = "123";
criteria.Add(Restrictions.Like("Number", "%" + search + "%"))
如果Number是一个字符串,那么它将变得容易:
.Add(Restrictions.Like("Number", "some_value",MatchMode.Anywhere))
既然你有一个数字,NHibernate会检查这个数字的类型,如果你给它一个字符串,它会抛出异常。
不确定为什么NH团队没有提供一个带有对象参数和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}。