如何用System.Linq.Dynamic生成对应T-SQL LIKE的StartsWith查询语句
在System.Linq.Dynamic中实现StartsWith生成
LIKE 'xxx%'的SQL 嘿,我之前也踩过这个坑!你不用直接在Dynamic的Where语句里写原生SQL的LIKE,这个库本身是对应Linq方法的语法来解析的,直接用StartsWith方法就可以自动生成你想要的LIKE 'test%'语句啦。
正确的写法应该是这样的:
// 使用参数化的方式,既安全又能正确解析 .Where("Description.StartsWith(@0)", "test")
这么写之后,动态Linq会自动把它转换成对应的SQL:Description LIKE 'test%',完全符合你的需求。
为什么之前的写法不生效?
直接写.Where("Description LIKE \"test%\"")这种原生SQL语法,Dynamic Linq的解析器是不支持的——它的语法规则是贴近Linq方法调用,而不是直接写SQL语句,所以原生SQL关键字在这里会被当成无效语法处理。
补充几个类似的用法,方便你举一反三:
- 要实现
LIKE '%test'(EndsWith):.Where("Description.EndsWith(@0)", "test") - 要实现
LIKE '%test%'(Contains):.Where("Description.Contains(@0)", "test")
另外,用@0这种参数占位符的方式还能避免SQL注入风险,比直接拼接字符串安全得多,建议一直用这种参数化的写法。
内容的提问来源于stack exchange,提问作者Kris van der Mast
相关产品推荐
相关产品推荐

