標籤:
原文:關於MySql entity framework 6 執行like查詢問題解決方案
本人不善於言辭,直接開門見山
環境:EF6.0.0.0+MySQL Server5.6+MySqlConnector6.9.5.0
問題點如下:
1 var username = "admin";2 var lst = userService.GetQuery().Where(p => p.UserName.Contains(username));3 foreach (var user in lst)4 {5 Console.WriteLine(user.Id);6 7 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";2 var lst = userService.GetQuery().Where(p => p.UserName.Contains(username.Trim())); //或ToLower()3 foreach (var user in lst)4 {5 Console.WriteLine(user.Id);6 7 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查詢!!
如下:
===========================================
雖然問題是暫時解決了,但是原因不明!請各位大蝦指教!
關於MySql entity framework 6 執行like查詢問題解決方案