2012-02-12 109 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。這就是它在方言中註冊的方式。