如何使用 NHibernate 文字 SQL [duplicate] 进行 SQL LIKE(包含)比较

How do I do a SQL LIKE (contains) comparison using NHibernate literal SQL [duplicate]

提问人:Benjamin U. 提问时间:11/15/2023 最后编辑:CharliefaceBenjamin U. 更新时间:11/17/2023 访问量:31

问:

这个问题在这里已经有答案了:
7天前关闭。

社群在 5 天前审查了是否重新打开这个问题,并将其关闭:

原始关闭原因未解决

我正在尝试使用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 查询。

C# SQL .NET nhibernate

评论

1赞 Charlieface 11/15/2023
WHERE i.Name LIKE '%' + @itemName + '%'或将 添加到客户端参数并执行%WHERE i.Name LIKE @itemName
0赞 Fran 11/17/2023
这不是在 SQL 中编写 LIKE 语句,而是使用 nhibernate 和 Criteria 语法编写 LIKE 语句。这是一个重复的,但它是这个问题的重复 stackoverflow.com/questions/8728796/......
0赞 Mark Rotteveel 11/17/2023
@Fran我将其添加到重复列表中。
0赞 Firo 11/19/2023
也是多余的。.List<int>().ToList()

答: 暂无答案