我有一个非常简单的 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 是:
richard
- 我得到了正确的结果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;
此处:'а'
!= 'a'
。一个来自 Cyrillic
'a'
,第二个是正常的。
想法取自:
幻灯片来自:http://sqlbits.com/Sessions/Event12/Revenge_The_SQL
附言我强烈推荐观看 Rob Volk 的演讲:Revenge: The SQL!
。
关于c# - Linq 查询未按预期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36355811/