EF SQLite的Like语句,生成为CHARINDEX的解决办法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了EF SQLite的Like语句,生成为CHARINDEX的解决办法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1337字,纯文字阅读大概需要2分钟。
内容图文
![EF SQLite的Like语句,生成为CHARINDEX的解决办法](/upload/InfoBanner/zyjiaocheng/498/ba6a133462f34969bf24338fb749472e.jpg)
在使用EF SQLite的时候发现Like语句不能完全查询出来,看了下生成的SQL语句类似于这种
(CHARINDEX(@p__linq__2, [Extent1].[LeagueName])) > 0)
查了下资料,在SQLite中是不支持CHARINDEX这个函数的,其实解决办法很简单,我们只要自己实现个Interceptor,再替换一下SQL语句,然后添加到EF中就可以了,下面是Interceptor的实现:
private static Regex replaceRegex = new Regex(@"\(\(CHARINDEX\((.*?), (.*?)\)\) > 0\)"); private void ReplaceCharIndexFunc(DbCommand command) { var flag = false; var text = replaceRegex.Replace(command.CommandText, m => { if (!m.Success) return m.Value; flag = true; var key = m.Groups[1].Value; var name = m.Groups[2].Value; //替换参数 foreach (DbParameter commandParameter in command.Parameters) { if (commandParameter.ParameterName == key.Substring(1)) { commandParameter.Value = $"%{commandParameter.Value}%"; break; } } return $"{name} LIKE {key}"; }); if (flag) command.CommandText = text; }
首先是正则替换掉所有的CHARINDEX,然后是修改查询的值。然后我们在EF中把Interceptor添加上去:
public QiuTanDb() : base("name=defaultConn") { DbInterception.Add(new SqliteInterceptor()); }
EF SQLite的Like语句,生成为CHARINDEX的解决办法
标签:log 实现 char 语句 替换 修改 linq 添加 name
本文系统来源:https://www.cnblogs.com/mldcy/p/8287575.html
内容总结
以上是互联网集市为您收集整理的EF SQLite的Like语句,生成为CHARINDEX的解决办法全部内容,希望文章能够帮你解决EF SQLite的Like语句,生成为CHARINDEX的解决办法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。