Izz*_*zzy 10 c# linq sql-server entity-framework sql-server-2012
我有一个非常简单的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
});
Run Code Online (Sandbox Code Playgroud)
这个问题是出于一些奇怪的原因,它把我搜索的每个人的记录都记录下来,无论是小写还是大写.即
我会找回正确的记录.然而,当我使用小写字母搜索我自己的名字时,我没有得到任何结果,但如果我使用我的名字的第一个字母作为大写,那么我得到结果.我似乎无法弄清楚为什么这样做.
数据库中的每个名字和姓氏都以大写字母开头.
我正在使用的searchString是:
richard
- 我得到了正确的结果waidande
- 未找到结果上述两个用户都在数据库中.
我也Entity Framework
用来查询Sql Server 2012
.
Luk*_*zda 10
如果您的文本具有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;
Run Code Online (Sandbox Code Playgroud)
在这里:'a'
!= Cyrillic
.一个来自'a'
Revenge: The SQL!
,第二个是正常的.
想法取自:
幻灯片:http://sqlbits.com/Sessions/Event12/Revenge_The_SQL
PS我强烈建议观看Rob Volk的演讲:NVARCHAR
.
要解决此问题,请确定问题是在EF端还是在DB端.一个常见的错误是额外的空格,所以在继续之前确保不是这种情况.
首先检查EF生成的查询,您可以使用以下方法之一来执行此操作
如果您正确使用EF并且您的查询按预期转换为SQL并且在where部分中包含谓词,但您仍然没有获得任何有意义的结果,这里有一些想法在DB端尝试:
归档时间: |
|
查看次数: |
670 次 |
最近记录: |