另见Differences between LINQ to Objects and LINQ to SQL queries
我们在数据库上使用一些查询,在内存对象中使用 。
与linq-to-sql相比,使用不敏感字符串的最佳方法是什么?
使用
a.ToLowerInvariant() == b.ToLowerInvariant()
至少得到相同的结果,但据我所知,它不会在SQL服务器上处理,所以可能会慢得多
a == b
答案 0 :(得分:7)
SQL数据库中的区分大小写由排序规则设置决定。默认情况下,我认为大多数数据库都不区分大小写,因此您应该检查是否确实需要明确处理区分大小写。
在归类设置中SQL_Latin1_General_CP1_CI_AS
- CI 代表不区分大小写, AS 代表重音敏感。
不幸的是,Linq-to-Sql忽略String.Compare()
的额外参数,因此您将无法明确设置区分大小写以进行比较。但它可以与linq一起使用。
如果使用区分大小写的排序规则,则可以使用SqlMethods.Like(field, "string")
之类的方法来使用LIKE查询(不区分大小写),但不会将linq转换为对象。
答案 1 :(得分:1)
以下是LINQ to SQL中支持的字符串操作列表,这显然可以在LINQ to对象中使用:http://msdn.microsoft.com/en-us/library/bb882672.aspx
我个人没有评估每个性能,但LINQ to SQL不支持ToLower和ToUpper,所以看起来Compare是一个很好的候选者。您可以使用LINQPad之类的工具来浏览已翻译的SQL,该工具具有免费版本并将查询转换为数据库SQL,并查看它如何针对数据库运行。
此外,LINQ to Objects可能有所不同,因此对一个人有利可能对其他人不利......
答案 2 :(得分:0)
我不是linq to sql的专家,但你可以在比较之前使用字符串的ToUpperInvariant()方法。