使用Dapper-dot-net … 8 O1 J1 f* n3 f; l0 {" k. i) u0 l以下数据对象无结果:8 \+ o% e% X% P
var data = conn.Query(@" select top Term as Label, Type, ID from SearchTerms WHERE Term like '%@T%'", new { T = (string)term });但是,当我只使用传统的字符串格式时,例如: 9 C. y* g$ x* O$ V Ustring 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?# n- o: u8 s% L7 U: b- T
# ^. D: \) A. \, _! T h# {* l解决方案: 3 d; u" R/ j& V# y
尝试:, T6 C$ Z& R. h! s1 K7 i O
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 });类似的操作符没有什么特别的,你永远不需要在字符串中包含参数,他们不能工作,而是把它们解释为字符串。 3 U+ b: A# I4 L/ F笔记 , _4 U+ p6 ~. Y3 m1 B强烈建议您不要在第二段中使用硬编码示例,除此之外sql除了巨大的注射问题,它还可能导致dapper泄漏。 ' ]! T' l2 J: O警告 + l* y1 d0 G$ X3 Z任何like通配符开头的匹配不能保存,这意味着它很慢,需要进行索引扫描。