关于MySql entity framework 6 执行like查询问题解决方案
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了关于MySql entity framework 6 执行like查询问题解决方案,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2218字,纯文字阅读大概需要4分钟。
内容图文
本人不善于言辞,直接开门见山
环境:EF6.0.0.0+MySQL Server5.6+MySqlConnector6.9.5.0
问题点如下:
1 var username = "admin"; 2var lst = userService.GetQuery().Where(p => p.UserName.Contains(username)); 3foreach (var user in lst) 4 { 5 Console.WriteLine(user.Id); 67 Console.WriteLine(user.UserName); 8 }
1、GetQuery是封装的,返回IQueryable<T>类型,采用以上查询方式,输出SQL语句为:
SELECT `Extent1`.`Id`, `Extent1`.`CaeateBy`, `Extent1`.`CreateDate`, `Extent1`.`CreateIp`, `Extent1`.`DefualtLang`, `Extent1`.`Descripton`, `Extent1`.`IsSystem`, `Extent1`.`LastEditBy`, `Extent1`.`LastEditDate`, `Extent1`.`LastEditIp`, `Extent1`.`Password`, `Extent1`.`RealName`, `Extent1`.`StatusId`, `Extent1`.`TypeId`, `Extent1`.`UserName` FROM `User` AS `Extent1` WHERE `Extent1`.`UserName` LIKE‘%p__linq__0%‘
为毛是 %p__linq__0% ??
如果用以下查询方式:
var lst = userService.GetQuery().Where(p => p.UserName.Contains("admin"));
输入SQL便是正确的:
SELECT `Extent1`.`Id`, `Extent1`.`CaeateBy`, `Extent1`.`CreateDate`, `Extent1`.`CreateIp`, `Extent1`.`DefualtLang`, `Extent1`.`Descripton`, `Extent1`.`IsSystem`, `Extent1`.`LastEditBy`, `Extent1`.`LastEditDate`, `Extent1`.`LastEditIp`, `Extent1`.`Password`, `Extent1`.`RealName`, `Extent1`.`StatusId`, `Extent1`.`TypeId`, `Extent1`.`UserName` FROM `User` AS `Extent1` WHERE `Extent1`.`UserName` LIKE‘%admin%‘
太奇葩了!!
结果搞了一整天,无意中发现如下解决方法如下:
1 var username = "admin"; 2var lst = userService.GetQuery().Where(p => p.UserName.Contains(username.Trim())); //或ToLower() 3foreach (var user in lst) 4 { 5 Console.WriteLine(user.Id); 67 Console.WriteLine(user.UserName); 8 }
就会生成如下正确的SQL:
Query SELECT `Extent1`.`Id`, `Extent1`.`CaeateBy`, `Extent1`.`CreateDate`, `Extent1`.`CreateIp`, `Extent1`.`DefualtLang`, `Extent1`.`Descripton`, `Extent1`.`IsSystem`, `Extent1`.`LastEditBy`, `Extent1`.`LastEditDate`, `Extent1`.`LastEditIp`, `Extent1`.`Password`, `Extent1`.`RealName`, `Extent1`.`StatusId`, `Extent1`.`TypeId`, `Extent1`.`UserName` FROM `User` AS `Extent1` WHERE (LOCATE(TRIM(‘admin‘), `Extent1`.`UserName`)) >0
虽然没有翻译成Like查询,但是却翻译成了Locate查询!! 真是奇葩,求高手解释
但是Locate查询效率要高于like查询!!
如下:
===========================================
虽然问题是暂时解决了,但是原因不明!请各位大虾指教!
原文:http://www.cnblogs.com/CnKker/p/4179259.html
内容总结
以上是互联网集市为您收集整理的关于MySql entity framework 6 执行like查询问题解决方案全部内容,希望文章能够帮你解决关于MySql entity framework 6 执行like查询问题解决方案所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。