2013-08-28 111 views
4

如何通过字符串属性的长度限制查询?例如。是这样的:NHibernate QueryOver受字符串长度限制

NHSession.QueryOver<Customer>() 
    .Where(p => p.RegistryCode.Length == 8) 
+0

如果添加了一些细节你的问题这将是很好。 – Jost

+0

不知道我可以添加什么额外的细节,这对我来说似乎是一个非常简单的问题? –

+0

是的,你的问题不是太重;-) - 但它包含诸如'customer'和一个常数(例如'8'),这些都没有进一步解释。不要担心,因为它是好的,你得到了你的答案。 – Jost

回答

4

像这样的事情可以做的伎俩

NHSession.QueryOver<Customer>() 
    .Where(
     Restrictions.Eq(
      Projections.SqlFunction("length", NHibernateUtil.String, 
       Projections.Property<Customer>(x => x.RegistryCode)), 
      8 
     ) 
    ) 
+0

谢谢,工作,虽然我不得不使用“长度”而不是“len”,按照[这个答案](http://stackoverflow.com/questions/9246626/nhibernate-support-the-function-len) –

+0

@ dänjel:很高兴它的工作,解决了我的答案;) –

1

而不是“NHibernateUtil.String”我应该用这种“NHibernateUtil.Int16”型,因为“长度”参数应该始终是一个数字而不是一个字符串。

事情是这样的:

NHSession.QueryOver<Customer>() 
    .Where(
     Restrictions.Eq(
      Projections.SqlFunction("length", NHibernateUtil.Int16, 
       Projections.Property<Customer>(x => x.RegistryCode)), 
      8 
     ) 
    ) 
+0

为什么这应该更好?请解释。 – Alexander

+0

在我看来,长度返回一个int而不是一个字符串。但它是一个nhibernate sql动作,它并不重要。 –