使用Dapper-dot-net …$ G6 Y$ @0 G) p, {+ F3 g* M6 |
以下数据对象无结果: , z& G) M6 v8 @# Z# {var data = conn.Query(@" select top Term as Label, Type, ID from SearchTerms WHERE Term like '%@T%'", new { T = (string)term });但是,当我只使用传统的字符串格式时,例如:+ B2 r0 V6 K) g! f; T6 L
string 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? # s% H- C+ G# C7 a ; u$ R3 d: }* z解决方案: ' I k0 P7 X* m z
尝试: 2 _9 L2 T. N4 ~+ a4 Xterm = "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 });类似的操作符没有什么特别的,你永远不需要在字符串中包含参数,他们不能工作,而是把它们解释为字符串。 ! u! F6 b- w0 L. Q$ K( n笔记 & b6 q+ C w- I8 R. k0 [3 i0 J% Q+ {强烈建议您不要在第二段中使用硬编码示例,除此之外sql除了巨大的注射问题,它还可能导致dapper泄漏。 0 U- \7 I! {" H警告 k. q* B. t9 x' m( ^( Z& q7 s& R+ j! h
任何like通配符开头的匹配不能保存,这意味着它很慢,需要进行索引扫描。