【问题标题】:Search query Contains null value?搜索查询包含空值?
【发布时间】:2014-07-11 17:37:21
【问题描述】:

在我的数据库中,我有字符串类型字段:client_name

我正在尝试通过他的名字搜索客户

sclient = (sclient ?? "").ToLower();

var items = session.Query().Where(x => x.Users.name.ToLower().Contains(sclient));

请注意,Users.name 是一个映射类。

当我执行简单的搜索时,一切正常。现在,当 i sclient 为 null 时,搜索不会显示 Client_name 为 null 的任何项目!

如何在搜索查询后显示名称为空的客户端?

【问题讨论】:

  • 您可能需要考虑当前的行为是否更可取。从应用程序中搜索空字段在安全性和性能方面存在一定风险

标签: sql nhibernate


【解决方案1】:

如果要返回包含搜索字符串或列值为空的记录,语法如下:

var items = session
     .Query<MyEntity>()
     .Where(x => x.Users.name.ToLower().Contains(sclient)
              || x.Users.name == null);

它会做这样的事情:

// sql generated
WHERE lower(users1_.client_name) like (''%''+@p1+''%'') 
   OR usrs1_.client_name is null

【讨论】:

  • 没关系,只要搜索参数超过 1 个,它也会显示空客户端。还有其他想法吗?
  • 如果我能正确理解你,你会说,可能会有更多条件......更多.Where().Where()......没关系,因为NHibernate会将上面的OR包裹在大括号@987654324中@ 并用 AND 加入其他条件...所以它应该按预期工作...任何进一步的条件都会缩小结果集...如果我没有正确理解您
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多