使用Dapper-dot-net …; p* w% j- q4 A4 o- e. E
以下数据对象无结果:0 I+ |0 q+ H$ v# X4 {9 |' K
var data = conn.Query(@" select top Term as Label, Type, ID from SearchTerms WHERE Term like '%@T%'", new { T = (string)term });但是,当我只使用传统的字符串格式时,例如: ! w, S: F% k4 \( }' { b8 c1 Z: Ystring QueryString = String.Format("select top 25 Term as Label,Type,ID from SearchTerms WHERE Term like ",term);var data = conn.Query(QueryString);我在集合中得到25行。Dapper参数的结尾是否无法正确分析@T? : z3 ] r; d! e: p! n6 Y& P : c- Q# S/ h {0 h Z- j 解决方案: % p- ?, ]/ E+ {2 d, u) Z3 A 尝试: % |) i; B o2 G, g. bterm = "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 });类似的操作符没有什么特别的,你永远不需要在字符串中包含参数,他们不能工作,而是把它们解释为字符串。2 F1 R+ Z: n" u5 U$ l 笔记 7 d1 ~, i% E" O7 D s; \! O强烈建议您不要在第二段中使用硬编码示例,除此之外sql除了巨大的注射问题,它还可能导致dapper泄漏。: q0 S, y, F- Q* W/ o 警告: A# O& L; ]/ s, A3 s
任何like通配符开头的匹配不能保存,这意味着它很慢,需要进行索引扫描。