我正在尝试对整数列进行类似搜索,我需要做的实际上是将列转换为 varchar,然后进行类似搜索。这可能吗?使用 Criteria API 最简单的方法是什么?
var search = "123";
criteria.Add(Restrictions.Like("Number", "%" + search + "%"))
我正在尝试对整数列进行类似搜索,我需要做的实际上是将列转换为 varchar,然后进行类似搜索。这可能吗?使用 Criteria API 最简单的方法是什么?
var search = "123";
criteria.Add(Restrictions.Like("Number", "%" + search + "%"))
如果 Number 是一个字符串,那么它会很容易:
.Add(Restrictions.Like("Number", "some_value",MatchMode.Anywhere))
因为你有一个数字,NHibernate 会检查 Number 的类型,如果你给它一个字符串,它会抛出一个异常。
不知道为什么 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}。