天天看点

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。。。还好没在环境版本不一致上走下去然后直接卸载环境重装,那得多麻烦啊。。。)