【问题标题】:NHibernate 3.0 search with substringNHibernate 3.0 使用子字符串搜索
【发布时间】:2011-05-07 17:26:17
【问题描述】:

我正在使用NHibernate 3.0 IQueryOver 进行搜索,其中我有一个搜索关键字。我需要在一个字符串中搜索,看看它是否是字符串的一部分,

Query().Where(e => e.Name.Contains(keyword)).List();

但这并没有按预期完成工作。应该如何进行这样的搜索?

【问题讨论】:

  • 请包括您正在使用的数据库以及哪些数据库没有按预期工作(根本不工作、异常、应该或不应该包含的结果等)正如 Notoriousxl 指出的那样,SQL CE不支持这个。
  • 您是否尝试将包含替换为“在”? SO中还有其他帖子提到了与您类似的问题:stackoverflow.com/questions/5044851/…

标签: nhibernate


【解决方案1】:

我检查了 NHibernate 源代码和 ExpressionProcessor 中的 QueryOver 字符串,就像您在上面发布的那样不支持 Contains。它支持的操作是 IsLike 和 IsIn。您可以使用IsLike,或者如果您热衷于包含,请使用 Linq。例如:

(from user in db.Users 
where names.Contains(user.Name)
  select user);

query.Where(person.Name.IsLike("%test%")) //In QueryOver

我猜你有一个“Unrecognised method call”异常。

【讨论】:

  • 正好适用于 sql server 2008。使用 NHib 3.0 但发现现在有 3.1 版本可用,因此可能会升级,因为 3.0 崩溃中的空集合。
  • 这是目前的解决方案。就像我想的那样,它只是悲伤包含不做这项工作。它是 NHibernate 中的错误吗?
【解决方案2】:

据我所知(至少对于 SQL Server,它似乎不适用于 SQL Server Compact),NHibernate 将 IQueryable 转换为不区分大小写的“如 '%keywork%'”where 子句。您是否期望进行区分大小写的搜索?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-26
    • 2016-06-21
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    相关资源
    最近更新 更多