NHibernate LINQ包含的内容不起作用

NHibernate LINQ包含的内容不起作用,linq,nhibernate,fluent-nhibernate,Linq,Nhibernate,Fluent Nhibernate,我是NHibernate的新手,与FluentNhibernate合作完成一个新项目。我在执行一个非常简单的linq查询时遇到了一个奇怪的问题 查询1-效果非常好 //Query 1 var customers = from customer in _session.Query<Customer>() where customer.FirstName == "john"

我是NHibernate的新手,与FluentNhibernate合作完成一个新项目。我在执行一个非常简单的linq查询时遇到了一个奇怪的问题

查询1-效果非常好

      //Query 1
          var customers = from customer in _session.Query<Customer>() 
                        where customer.FirstName == "john"
                        select new
                        {
                            customer.FirstName,
                            customer.LastName
                        };
当执行下面的查询2时,我得到一个错误,无法执行查询

       //Query 2.
           var customers = from customer in _session.Query<Customer>() 
                         where customer.FirstName.Contains("john")
                        select new
                        {
                            customer.FirstName,
                            customer.LastName
                        };
NH生成的查询是

选择customer0\u.FirstName作为col\u 0\u,选择customer0\u.LastName作为col\u 1\u 0\u 来自TBL客户0\u 其中customer0.FirstName类似“%”| |@p0 | |“%”@p0=‘约翰’

它生成了类似“%”| |@p0 | |“%”的名字,而不是我能理解的类似“%”+@p0+'%的名字

我使用的数据库是SQLServerCE,NHibernate版本是3.1.0


请帮助解决此问题。

这是NH的dialent.cs文件基方言类中concat函数的定义:

RegisterFunction("concat", new VarArgsSQLFunction(NHibernateUtil.String, "(", "||", ")"));
应该是哪一个

RegisterFunction("concat", new VarArgsSQLFunction(NHibernateUtil.String, "(", "+", ")"));
对于SQLCE。 所以您必须使用MSSQLSCE40方言类。 我认为它还没有在fluent NHibernate中注册,所以您可以这样定义它:

... MsSqlCeConfiguration.Standard  
                      ...  
                      .Dialect<MsSqlCe40Dialect>();  
然后您可以通过定义以下内容来使用它:

... MsSqlCeConfiguration.Standard.Dialect<TempSqlCeDialect>() ...

您使用的是什么版本的NHibernate?在您使用的SQL方言中,| |不可能是字符串连接的选项吗?你在使用什么数据库?查询是否确实失败?我使用的是NHibernate v 3.1.0我使用的是SQL Server embedded edition,但查询失败。已将方言更改为MSSQLSCE40方言,但仍不起作用。我必须等到那个bug被修复了吗?或者我已经编辑了我的上一篇文章来添加TempSqlCeDialect。它应该能解决问题。
... MsSqlCeConfiguration.Standard.Dialect<TempSqlCeDialect>() ...