2014-07-19 34 views
0

我正在使用NHibernate。我想用加盟的queryover,试试下面的代码,但是这给了错误,加入NHibernate中的查询

session.QueryOver(Of Messages)() 
    .Where(Function(x) x.UserID_Messages.Username.Contains(msgfrom)) 
    .And(Function(x) x.Message.Contains(msg)) 
    .And(Function(x) x.MsgDate >= startdate) 
    .List 

但这个错误=无法识别的方法调用:System.String:布尔包含(System.String) 如果我尝试此查询

session.QueryOver(Of Messages) 
    .JoinQueryOver(Of Users)(Function(x) x.UserID_Messages) 
    .WhereRestrictionOn(Function(x) x.Username).IsLike("%" & tosearch & "$") 
    .List(Of Messages)() 

这个结果为空,偶数记录在数据库中。请指导我做错了什么,或者什么是正确的方法来实现这一点。谢谢

+1

你确定你的搜索词总是以“$”结尾? – Andreas

回答

0

.Contains方法是一种.NET方法,当使用QueryOver语法时,它不会翻译为SQL语句。第二种方法,QueryOver原生方法IsLike是我们需要的。可以肯定,我们将结束与这样的SQL:

username LIKE '%the searched value%' 

我们应该使用内置的MatchMode

.WhereRestrictionOn(Function(x) x.Username).IsLike(tosearch, MatchMode.Anywhere) 

MatchMode类定义