2013-08-28 108 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動作,它並不重要。 –