图片引自网络
环境:
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进行模糊查询
lambda表达式
其中moduleName是一个keyword参数,modules是一个数据集。
//问题:
无论keyword输入的参数是任何值经过上述语句后都将数据全部过滤掉了,导致Count始终为0。通过窗口可以看到moduleName=“服”,而数据集一共存在2条数据,且第2条数据的FDocName值为“热门服务”,那么根据lambda中contains筛选后应该会存在一条数据的。
局部变量窗口(筛选前)
通过筛选后的局部窗口我们可以看到结果居然是空的,说明数据没有按照预期的筛选出第2条数据来。
局部变量窗口(筛选后)
生成的语句为:`Extent1`.`FDocName` LIKE @p__linq__0,起初怀疑是环境版本对应关系有问题,因为网上有人遇到过Contains使用时出现类似的问题:
网友遇到的问题描述
因为我用的也是变量的方式,所以我尝试将变量更改为字面量,直接将"服"写在Contains函数中,但结果一样是0条,底部有网友回复说:
版本不一致
但我直接排除了这个原因,因为我这个问题在之前的仓库版本中是不存在的,所以我估计是我这一次重新生成了数据实体模型哪里出错了,然后把生成前的一个版本克隆下来,对比了VS生成的数据库连接字符串立马就发现了问题。
出现问题的连接字符串
正常的连接字符串
原来,我在创建数据库连接时没有指定编码,导致中文字体在生成SQL时乱码,那肯定匹配不到任何数据了。
所以连接字符串中最好需要指定一下字符集编码,避免一些不必要的麻烦。
(emmmmmmmmmmmmmm。。。还好没在环境版本不一致上走下去然后直接卸载环境重装,那得多麻烦啊。。。)