c# – Linq查询不符合预期

我有一个非常简单的 linq查询,如下所示:
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 
              });

问题是出于某些奇怪的原因,它吸引了我搜索无论是小写还是大写的每个人的记录.即

>测试用户
>测试用户
>测试用户

我会收回正确的记录.然而,当我使用小写搜索我自己的名字时,我没有得到任何结果,但如果我用我的名字的第一个字母作为大写,那么我得到的结果.我似乎无法弄清楚为什么这样做.

数据库中的每个名字和大写字母以大写字母开头.

我正在使用的searchString是:

理查德 – 我得到正确的结果
> waidande – 没有找到结果

上述两个用户都在数据库中.

我也使用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;

LiveDemo

这里:’а’!=’a’.一个来自西里尔的“a”,第二个是正常的.

想法取自:

幻灯片http://sqlbits.com/Sessions/Event12/Revenge_The_SQL

附:我强烈推荐观看Rob Volk的演讲:复仇:sql

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...