天天看點

mssql 查詢無記錄時sum_記錄使用Lambda表達式Contains實作Like查詢時發現的小問題

mssql 查詢無記錄時sum_記錄使用Lambda表達式Contains實作Like查詢時發現的小問題

圖檔引自網絡

環境:

Visual Studio 2017旗艦版

MySQL 5.7(管理工具 => Navicat for MySQL 11.1.13 64位企業版)

.Net Framework 4.6.1

Entity Framework 6.2

MySQL for Visual Studio 1.2.8

MySQL Connector Net 6.9.12

MySQL.Data 6.9.12

//需求:

我需要根據字段FDocName進行模糊查詢

mssql 查詢無記錄時sum_記錄使用Lambda表達式Contains實作Like查詢時發現的小問題

lambda表達式

其中moduleName是一個keyword參數,modules是一個資料集。

//問題:

無論keyword輸入的參數是任何值經過上述語句後都将資料全部過濾掉了,導緻Count始終為0。通過視窗可以看到moduleName=“服”,而資料集一共存在2條資料,且第2條資料的FDocName值為“熱門服務”,那麼根據lambda中contains篩選後應該會存在一條資料的。

mssql 查詢無記錄時sum_記錄使用Lambda表達式Contains實作Like查詢時發現的小問題

局部變量視窗(篩選前)

通過篩選後的局部視窗我們可以看到結果居然是空的,說明資料沒有按照預期的篩選出第2條資料來。

mssql 查詢無記錄時sum_記錄使用Lambda表達式Contains實作Like查詢時發現的小問題

局部變量視窗(篩選後)

生成的語句為:`Extent1`.`FDocName` LIKE @p__linq__0,起初懷疑是環境版本對應關系有問題,因為網上有人遇到過Contains使用時出現類似的問題:

mssql 查詢無記錄時sum_記錄使用Lambda表達式Contains實作Like查詢時發現的小問題

網友遇到的問題描述

因為我用的也是變量的方式,是以我嘗試将變量更改為字面量,直接将"服"寫在Contains函數中,但結果一樣是0條,底部有網友回複說:

mssql 查詢無記錄時sum_記錄使用Lambda表達式Contains實作Like查詢時發現的小問題

版本不一緻

但我直接排除了這個原因,因為我這個問題在之前的倉庫版本中是不存在的,是以我估計是我這一次重新生成了資料實體模型哪裡出錯了,然後把生成前的一個版本克隆下來,對比了VS生成的資料庫連接配接字元串立馬就發現了問題。

mssql 查詢無記錄時sum_記錄使用Lambda表達式Contains實作Like查詢時發現的小問題

出現問題的連接配接字元串

mssql 查詢無記錄時sum_記錄使用Lambda表達式Contains實作Like查詢時發現的小問題

正常的連接配接字元串

原來,我在建立資料庫連接配接時沒有指定編碼,導緻中文字型在生成SQL時亂碼,那肯定比對不到任何資料了。

是以連接配接字元串中最好需要指定一下字元集編碼,避免一些不必要的麻煩。

(emmmmmmmmmmmmmm。。。還好沒在環境版本不一緻上走下去然後直接解除安裝環境重裝,那得多麻煩啊。。。)