【发布时间】:2016-04-01 12:00:09
【问题描述】:
我有一个非常简单的 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。
【问题讨论】:
-
您能否显示确切的数据和
searchString的值,它似乎进行了不区分大小写的匹配,然后是似乎进行了区分大小写的匹配。还有什么是employeeRepo?它是某种类型的 Linq to SQL 提供程序吗? -
会不会和你的SQL Server的区分大小写设置有关?
-
您是否尝试过实际运行 SQL 查询?类似于
Select * From EmployeeRepo Where EnployeeName Like '%richard%' Or SAMAccountName Like '%richard%'然后复制并粘贴另一个值,看看结果是什么。我怀疑这是一个案例问题,更有可能在您的数据库或搜索字符串中存在一些特殊字符正在抛出它。 -
无论是小写还是大写 - 如您所说,
GetAll()是IEnumerable<T> GetAll();,这很奇怪,这使得这是一个简单的 .Net 匹配。 -
也许这是你的情况demo
标签: c# sql-server entity-framework linq sql-server-2012