我试图做对一个整数列类似的搜索,我需要做的是实际投柱为varchar,然后执行类似搜索。这可能吗?什么是做这个使用标准API的最简单的方法?

var search = "123";
criteria.Add(Restrictions.Like("Number", "%" + search + "%"))
有帮助吗?

解决方案

如果数分别为一个字符串,那么这将是容易的:

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

既然你有一个数字,NHibernate的会检查数的类型,如果你给它一个字符串时,它会抛出异常。

不知道为什么团队NH没有提供过载与对象作为参数和MatchMode参数....

总之,你仍然可以做这样的:

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

修改

关于别名:

(我无法找到本文档;关于这个谈判,但这里是我对它的理解)

{别名}返回由NH为最近个createCriteria内部使用的别名。所以,如果你有:

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

{别名}在这种情况下将是“文档” - 这样你就结束了。doc.Number

所以,一定要使用{}别名其别名,你需要使用个createCriteria后。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top