关于MySql entity framework 6 执行like查询问题解决方案
2014-12-22 23:40
656 查看
本人不善于言辞,直接开门见山
环境:EF6.0.0.0+MySQL Server5.6+MySqlConnector6.9.5.0
问题点如下:
1、GetQuery是封装的,返回IQueryable<T>类型,采用以上查询方式,输出SQL语句为:
为毛是 %p__linq__0% ??
如果用以下查询方式:
输入SQL便是正确的:
太奇葩了!!
结果搞了一整天,无意中发现如下解决方法如下:
就会生成如下正确的SQL:
虽然没有翻译成Like查询,但是却翻译成了Locate查询!! 真是奇葩,求高手解释
但是Locate查询效率要高于like查询!!
如下:
===========================================
虽然问题是暂时解决了,但是原因不明!请各位大虾指教!
环境:EF6.0.0.0+MySQL Server5.6+MySqlConnector6.9.5.0
问题点如下:
var username = "admin"; var lst = userService.GetQuery().Where(p => p.UserName.Contains(username)); foreach (var user in lst) { Console.WriteLine(user.Id); Console.WriteLine(user.UserName); }
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%'
太奇葩了!!
结果搞了一整天,无意中发现如下解决方法如下:
var username = "admin"; var lst = userService.GetQuery().Where(p => p.UserName.Contains(username.Trim())); //或ToLower() foreach (var user in lst) { Console.WriteLine(user.Id); Console.WriteLine(user.UserName); }
就会生成如下正确的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查询!!
如下:
===========================================
虽然问题是暂时解决了,但是原因不明!请各位大虾指教!
相关文章推荐
- 关于MySql entity framework 6 执行like查询问题解决方案
- Mysql通过中文查询数据查不出结果问题解决方案
- 关于VS2017,VS2015 中利用 EF使用Mysql 不显示数据源问题解决方案
- MySQL 中文模糊查询不正确问题解决方案
- MySQL 中文模糊查询不正确问题解决方案
- MySQL 中文模糊查询不正确问题解决方案 .
- 关于MYSQL通过子查询删除重复数据的for update报错问题解决
- MySQL查询全部数据集结果不一致问题解决方案
- 关于VS2017,VS2015 中利用 EF使用Mysql 不显示数据源问题解决方案
- 关于mysql查询字符集不匹配问题的解决方法
- Mysql查询条件不区分问题解决方案
- mssql中的like关于执行计划异常问题以及解决
- 关于PHP 查询 mysql 乱码问题解决方式
- mysql查询安装目录与安装mysql时候如果遇到什么public key not installed 问题解决方案。
- MySQL查询全部数据集结果不一致问题解决方案
- 安装VS2008关于解决磁盘已满问题方案.
- 关于查询报表总是"超时已过期"的问题解决
- MySQL的Like查询问题
- MySQL5指定时间段查询问题(已解决)
- 关于在MySQL 、 VC、 JSP 中使用UTF-8解决中文生僻字乱码的问题