2012-02-12 95 views
1

我想要得到的结果:NHibernate的支持功能:LEN

select * from Cate where LEN(code)=2 

我的代码:

var filter1 = Restrictions.Eq(
       Projections.SqlFunction("LEN", NHibernateUtil.Int32, 
             Projections.Property("code")), 2); 
      var query = 
       repository.Session.QueryOver<Cate>().Where(filter1).List(); 
      Assert.IsTrue(query.Count > 0); 

然而,也出现了错误:

NHibernate.HibernateException:当前方言 NHibernate.Dialect.MsSql2008Dialect不支持该功能:LEN

如何在Nhibernate中使用Len函数的SQLServer2008?

回答

-2

你应该注册您的功能无论是在配置类

config.AddSqlFunction("len", new StandardSafeSQLFunction("len", NHibernateUtil.Int32, 1)); 

,或者创建自定义的方言

public class MyDialect : MsSql2008Dialect 
{ 
    public MyDialect() 
    { 
     RegisterFunction("len", new StandardSafeSQLFunction("len", NHibernateUtil.Int32, 1)); 
    } 
} 
+1

这不是必需的;该功能已被注册。 – 2012-02-12 15:54:11

+0

已解决,谢谢! – xj7799911 2012-02-25 02:49:05

5

使用length而不是len。这就是它在方言中注册的方式。