NHibernate的 - 做对与标准API整数列LIKE搜索最简单的方法?
-
22-07-2019 - |
题
我试图做对一个整数列类似的搜索,我需要做的是实际投柱为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后。
不隶属于 StackOverflow