【发布时间】:2014-10-08 06:20:33
【问题描述】:
我遇到了一些 Entity Framework 的问题,我只是找不到解决方案。
我想要做的是比较我在服务器上运行的搜索功能的字符串。基本上是:collection.Where(c => c.Name.Contains(searchTerm)); 其中 searchTerm 是用户传递的字符串。
我所看到的任何地方都是:
使用 toUpper() 更改两个字符串,或
将排序规则设置为不区分大小写的排序规则。
但是,这些都不适用于我的情况。这是一个没有答案的类似问题:Entity Framework - case insensitive Contains?
使用第一个替代方法将导致获取数据库中的每一行,然后执行 toUpper() 以查看它是否匹配。这在性能方面是不可接受的。
第二种方法似乎更有可能是一个有效的解决方案,但由于某种原因不起作用。我有两个数据库。一本地一远程。远程 MSSQL 数据库设置为排序规则:Finnish_Swedish_CI_AS,这意味着它不区分大小写?本地数据库是自动生成的 localDB,属性“Case Sensitive”设置为 False。
无论我使用这两个数据库中的哪一个,它对用户来说始终是区分大小写的。
有人能解释一下为什么会这样,这样我就可以继续我悲惨的生活吗?
亲切的问候, 罗宾·多贝尔
【问题讨论】:
-
您的类似问题是 LINQ Contains Case Insensitive 的欺骗,它有一个 IndexOf 解决方案。你可能想试试那个
-
所以您的意思是 IndexOf 解决方案不会告诉实体框架在比较之前检索每条记录?
-
您是否阅读过有关不同语言的答案? stackoverflow.com/questions/444798/… 这意味着您应该改用 CultureInfo 类。
-
您确定搜索正在服务器上执行吗?检查“_collection”的类型?如果是
IEnumerable<?>,则查询将在 C# 代码中执行,而不是在数据库服务器上(并且区分大小写)。如果是IQueryable<?>,那么它可能正在数据库服务器上执行。 -
@Grax 可能就是这样。集合类型是
ICollection<T>。
标签: c# sql-server asp.net-mvc linq entity-framework