私のデータベースの一部のレコードには角かっこが含まれています。
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は、角かっこで囲まれた文字のいずれかに対する正規表現の一致の開始と見なすため、これは結果を返しません。これはSQLServerの問題であり、pl-sqlは[
特殊文字とは見なされません。
NH-938Restrictions.Like
は、エスケープ文字を渡すことを許可するためのオーバーロードについて言及していますが、使用されるコード(NHibernate.Linqの一部)を制御できません。
私は自分のコードでaを実行できることを知ってsearchTerm.Replace("[", "[[]");
いますが、より一般的な解決策を探していました。これはSQLServerにのみ固有であるため、Hibernate.Dialect.MsSql2000Dialectに追加します。