小编典典

Dapper是否支持like运算符?

sql

使用Dapper-dot-net …

以下在数据对象中不产生任何结果:

var data = conn.Query(@"
    select top 25 
    Term as Label, 
    Type, 
    ID 
    from SearchTerms 
    WHERE Term like '%@T%'", 
    new { T = (string)term });

但是,当我只使用常规的字符串格式时,例如:

string QueryString = String.Format("select top 25 Term as Label, Type, ID from SearchTerms WHERE Term like '%{0}%'", term);
var data = conn.Query(QueryString);

我在集合中得到25行。Dapper是否无法正确解析参数的结尾@T


阅读 315

收藏
2021-04-15

共1个答案

小编典典

尝试:

term = "whateverterm";
var encodeForLike = term => term.Replace("[", "[[]").Replace("%", "[%]");

string term = "%" + encodeForLike(term) + "%";
var data = conn.Query(@"
   select top 25 
  Term as Label, 
  Type, 
  ID 
  from SearchTerms 
  WHERE Term like @term", 
  new { term });

类似运算符没有什么特别的,您永远不需要在字符串文字中包含参数,它们将无法工作,而是将它们解释为字符串。

笔记

强烈建议您不要在第二个片段中使用硬编码的示例,除了这是sql注入的巨大问题之外,它还可能导致dapper泄漏。

警告

任何like以通配符开头的匹配都不可保存,这意味着它很慢,需要进行索引扫描。

2021-04-15