使用Dapper-dot-net … 0 P- B1 h/ d2 e# f3 r1 h以下数据对象无结果: @/ ]/ L( x3 G% m7 v
var data = conn.Query(@" select top Term as Label, Type, ID from SearchTerms WHERE Term like '%@T%'", new { T = (string)term });但是,当我只使用传统的字符串格式时,例如: $ i7 Y: M) {# x. l* T5 Q" Qstring 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?1 ?! k& T* U9 K( V5 u
' S) m( r5 _/ r2 K7 s解决方案: $ N$ k& |# `& T' L: N: C& L 尝试: 8 R" q5 _( \: }9 }8 Hterm = "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 });类似的操作符没有什么特别的,你永远不需要在字符串中包含参数,他们不能工作,而是把它们解释为字符串。% c! |( a# y' D3 d 笔记7 C# J- l$ J- m
强烈建议您不要在第二段中使用硬编码示例,除此之外sql除了巨大的注射问题,它还可能导致dapper泄漏。 $ n# u+ i# x/ O9 E* R; I0 o警告 6 ~* d9 d6 S- I Z! u' x任何like通配符开头的匹配不能保存,这意味着它很慢,需要进行索引扫描。