使用Dapper-dot-net …0 L4 L, Y6 O8 \& z
以下数据对象无结果:3 y* s: @' W7 ^ M" G
var data = conn.Query(@" select top Term as Label, Type, ID from SearchTerms WHERE Term like '%@T%'", new { T = (string)term });但是,当我只使用传统的字符串格式时,例如: 0 P. G2 l( h4 a- M7 p- \6 @, }! E) mstring 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?6 v1 n* Z; {9 a! }; S" Q7 k+ M
p4 d5 _; x5 {8 M8 ]( S3 G解决方案: S6 z8 D; V2 L 尝试:3 q6 Z/ L" a5 @. ^( i
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 });类似的操作符没有什么特别的,你永远不需要在字符串中包含参数,他们不能工作,而是把它们解释为字符串。" Z' n$ o; h# [& r 笔记 7 }, q: b, g1 u5 u# k强烈建议您不要在第二段中使用硬编码示例,除此之外sql除了巨大的注射问题,它还可能导致dapper泄漏。) E5 Z3 t4 J" l; B% ~! l C! Q 警告 : D+ K1 a1 }' j9 g! e3 d) {) y( k9 `任何like通配符开头的匹配不能保存,这意味着它很慢,需要进行索引扫描。