NHibernate查询受字符串长度限制

NHibernate查询受字符串长度限制,nhibernate,queryover,nhibernate-criteria,Nhibernate,Queryover,Nhibernate Criteria,如何通过字符串属性的长度限制查询?例如: NHSession.QueryOver<Customer>() .Where(p => p.RegistryCode.Length == 8) NHSession.QueryOver() .Where(p=>p.RegistryCode.Length==8) 像这样的事情可能会奏效 NHSession.QueryOver<Customer>() .Where( Restrictions.Eq

如何通过字符串属性的长度限制查询?例如:

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

像这样的事情可能会奏效

NHSession.QueryOver<Customer>()
    .Where(
        Restrictions.Eq(
            Projections.SqlFunction("length", NHibernateUtil.String, 
                Projections.Property<Customer>(x => x.RegistryCode)),
            8
        )
    )
NHSession.QueryOver()
.在哪里(
限制条件(
Projections.SqlFunction(“长度”,NHibernateUtil.String,
Projections.Property(x=>x.RegistryCode)),
8.
)
)
我应该使用“NHibernateUtil.Int16”类型,而不是“NHibernateUtil.String”,因为“length”参数应该始终是数字而不是字符串

大概是这样的:

NHSession.QueryOver<Customer>()
    .Where(
        Restrictions.Eq(
            Projections.SqlFunction("length", NHibernateUtil.Int16, 
                Projections.Property<Customer>(x => x.RegistryCode)),
            8
        )
    )
NHSession.QueryOver()
.在哪里(
限制条件(
Projections.SqlFunction(“长度”,NHibernateUtil.Int16,
Projections.Property(x=>x.RegistryCode)),
8.
)
)

如果您能为您的问题添加更多细节,那就太好了。不知道我还可以添加哪些细节,这对我来说似乎是一个非常简单的问题?是的,您的问题不太重;-)-但是它包含像
customer
和常量(例如
8
)之类的内容,这些内容没有进一步解释。别担心,现在一切都好,你已经得到了答案。谢谢,已经成功了,尽管我不得不用“长度”而不是“len”,因为为什么这样会更好?请解释一下。在我看来,长度返回的是int而不是字符串。但这是一个nhibernate sql操作,其实并不重要。