提问人:Benjamin U. 提问时间:11/15/2023 最后编辑:CharliefaceBenjamin U. 更新时间:11/17/2023 访问量:31
如何使用 NHibernate 文字 SQL [duplicate] 进行 SQL LIKE(包含)比较
How do I do a SQL LIKE (contains) comparison using NHibernate literal SQL [duplicate]
问:
我正在尝试使用NHibernate执行以下查询:
var sql = @"
SELECT DISTINCT i.Id
FROM Item i
WHERE i.Name LIKE '%:itemName%'
";
var query = session.CreateSQLQuery(sql)
.SetParameter("itemName", "torque");
var itemIds = query.List<int>().ToList();
但是,我遇到的问题是上述查询导致以下错误:.'could not locate named parameter [itemName]'
我还尝试了以下方法,每种方法都有自己的问题:
i.Name LIKE '%{itemName}%'
(使用字符串插值)。这可行,但容易受到 SQL 注入的影响。i.Name LIKE :itemName
.这并没有给我正确的结果,因为它等同于说 i.Name EQUALS itemName 而不是 i.Name CONTAINS itemName。i.Name LIKE %:itemName%
.这会导致“找不到命名参数 [itemName]”错误。
有没有办法在仍然使用手写 SQL 的同时执行我尝试进行的比较?不幸的是,我的实际查询比上面列出的要复杂得多,因此需要一个字面上的 SQL 查询。
答: 暂无答案
评论
WHERE i.Name LIKE '%' + @itemName + '%'
或将 添加到客户端参数并执行%
WHERE i.Name LIKE @itemName
.List<int>().ToList()