使用Dapper-dot-net …
以下在数据对象中不产生任何结果:
var data = conn.Query(@" select top 25 Term as Label, Type, ID from SearchTerms WHERE Term like '%@T%'", new { T = (string)term });
但是,当我只使用常规的字符串格式时,例如:
string QueryString = String.Format("select top 25 Term as Label, Type, ID from SearchTerms WHERE Term like '%{0}%'", term); var data = conn.Query(QueryString);
我在集合中得到25行。Dapper是否无法正确解析参数的结尾@T?
@T
尝试:
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 });
类似运算符没有什么特别的,您永远不需要在字符串文字中包含参数,它们将无法工作,而是将它们解释为字符串。
笔记
强烈建议您不要在第二个片段中使用硬编码的示例,除了这是sql注入的巨大问题之外,它还可能导致dapper泄漏。
警告
任何like以通配符开头的匹配都不可保存,这意味着它很慢,需要进行索引扫描。
like