我的数据库中的一些记录包含方括号,例如。
dafalgan [1gram]
valium [15mg]
...
但是,当我想使用以下表达式查询 NHibernate.Linq 时
return x => x.Description.Contains(searchTerm)
其中 searchTerm 是 'dafalgan [1gram]' 使用/生成以下 SQL:
SELECT FieldName1, FieldName2
FROM TableName
WHERE (Description LIKE '%' + N'dafalgan [1gram]' + '%')
这不会返回任何结果,因为 SQL Server 认为[
是正则表达式匹配括号之间任何一个字符的开始。这只是 SQL Server 的问题,pl-sql 不认为[
是特殊字符。
NH-938提到了允许传递转义字符的重载,Restrictions.Like
但我无法控制使用的代码(NHibernate.Linq 的一部分)。
我知道我可以searchTerm.Replace("[", "[[]");
在我的代码中做一个,但我正在寻找一个更通用的解决方案,例如。将其添加到 Hibernate.Dialect.MsSql2000Dialect 因为它仅特定于 SQL Server。