我有一个非常简单的
linq查询,如下所示:
>测试用户
>测试用户 @H_404_4@我会收回正确的记录.然而,当我使用小写搜索我自己的名字时,我没有得到任何结果,但如果我用我的名字的第一个字母作为大写,那么我得到的结果.我似乎无法弄清楚为什么这样做. @H_404_4@数据库中的每个名字和大写字母以大写字母开头. @H_404_4@我正在使用的searchString是: @H_404_4@理查德 – 我得到正确的结果
> waidande – 没有找到结果 @H_404_4@上述两个用户都在数据库中. @H_404_4@我也使用Entity Framework来查询sql Server 2012.
var result = (from r in employeeRepo.GetAll() where r.EmployeeName.Contains(searchString) || r.SAMAccountName.Contains(searchString) orderby r.EmployeeName select new SelectListItem { Text = r.EmployeeName,Value = r.EmployeeName });@H_404_4@问题是出于某些奇怪的原因,它吸引了我搜索无论是小写还是大写的每个人的记录.即 @H_404_4@>测试用户
>测试用户
>测试用户 @H_404_4@我会收回正确的记录.然而,当我使用小写搜索我自己的名字时,我没有得到任何结果,但如果我用我的名字的第一个字母作为大写,那么我得到的结果.我似乎无法弄清楚为什么这样做. @H_404_4@数据库中的每个名字和大写字母以大写字母开头. @H_404_4@我正在使用的searchString是: @H_404_4@理查德 – 我得到正确的结果
> waidande – 没有找到结果 @H_404_4@上述两个用户都在数据库中. @H_404_4@我也使用Entity Framework来查询sql Server 2012.
解决方法
如果您的文本具有NVARCHAR数据类型检查类似的字母,实际上是不一样的:
CREATE TABLE #employee (ID INT IDENTITY(1,1),EmployeeName NVARCHAR(100)); INSERT INTO #employee(EmployeeName) VALUES (N'waidаnde'); SELECT * FROM #employee WHERE EmployeeName LIKE '%waidande%'; -- checking SELECT * FROM #employee WHERE CAST(EmployeeName AS VARCHAR(100)) <> EmployeeName;@H_404_4@
LiveDemo
@H_404_4@这里:’а’!=’a’.一个来自西里尔的“a”,第二个是正常的.
@H_404_4@想法取自:
@H_404_4@
@H_404_4@幻灯片:http://sqlbits.com/Sessions/Event12/Revenge_The_SQL
@H_404_4@附:我强烈推荐观看Rob Volk的演讲:复仇:sql!