【问题标题】:Join In queryover in NHibernate在 NHibernate 中加入查询
【发布时间】:2014-07-19 09:57:10
【问题描述】:

我正在使用 NHibernate。我想在 queryover 上使用 join,尝试以下代码,但这会出错,

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:Boolean Contains(System.String) 如果我尝试这个查询

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

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

【问题讨论】:

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

标签: sql vb.net nhibernate


【解决方案1】:

.Contains 方法是一种 .NET 方法,在使用QueryOver 语法时不会翻译成 SQL 语句。第二种方法,QueryOver 本机方法IsLike 是我们需要的。可以肯定的是,我们最终会得到这样的 SQL:

username LIKE '%the searched value%'

我们应该使用内置的MatchMode

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

查看MatchMode 类定义

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多