NHibernate和整数一样

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NHibernate和整数一样相关的知识,希望对你有一定的参考价值。

我有一个NHibernate搜索函数,我接收整数并希望返回结果,其中至少开始与整数重合,例如

收到整数:729 返回:729445,7291等

数据库列的类型为int,Foo的属性“Id”也是如此。

int id = 729;

var criteria = session.CreateCriteria(typeof(Foo))

criteria.Add(NHibernate.Criterion.Expression.InsensitiveLike("Id", id.ToString() + "%"));

return criteria.List<Foo>();

确实导致错误(无法将参数字符串转换为int32)。代码,解决方法或其他解决方案是否有问题?

答案

这个怎么样:

int id = 729;

var criteria = session.CreateCriteria(typeof(Foo))
criteria.Add(Expression.Like(Projections.Cast(NHibernateUtil.String, Projections.Property("Id")), id.ToString(), MatchMode.Anywhere));

return criteria.List<Foo>();
另一答案

你尝试过这样的事情:

int id = 729;

var criteria = session.CreateCriteria(typeof(Foo))

criteria.Add(NHibernate.Criterion.Expression.Like(Projections.SqlFunction("to_char", NHibernate.NHibernateUtil.String, Projections.Property("Id")), id.ToString() + "%"));

return criteria.List<Foo>();

我们的想法是在使用to_char函数之前转换列。有些数据库自动执行此操作

另一答案

AFAIK,你需要将整数作为字符串存储在数据库中,如果你想使用内置的NHibernate功能(即使没有NHibernate,我也会推荐这种方法 - 你开始做的那一刻'就像'搜索你正在处理用字符串,而不是数字 - 想想美国邮政编码等...)。

您也可以在数据库特定的函数中进行数学处理(或者转换为Thiago Azevedo's answer中描述的字符串),但我想这些选项会明显变慢,并且还有可能将您绑定到特定的数据库。

以上是关于NHibernate和整数一样的主要内容,如果未能解决你的问题,请参考以下文章

为啥此代码片段返回意外结果?

vc++2010设置和c#一样的代码段,vs2010 两下tab设置

NHibernate 和代码优先

c_cpp 这个简单的代码片段显示了如何使用有符号整数在C中完成插值。 for()循环确定要插入的范围

JavaScript 有用的代码片段和 trick

代码优先实体框架或 NHibernate