不区分大小写的字符串与linq-to-sql和linq-to-objects进行比较

时间:2010-03-05 15:55:26

标签: .net linq linq-to-sql linq-to-objects

另见Differences between LINQ to Objects and LINQ to SQL queries

我们在数据库上使用一些查询,在内存对象中使用

与linq-to-sql相比,使用不敏感字符串的最佳方法是什么?

  • 它在SQL Server上运行速度
  • 相同的查询表达式可以与linq-to-objects一起使用以获得相同的结果

使用

a.ToLowerInvariant() == b.ToLowerInvariant()

至少得到相同的结果,但据我所知,它不会在SQL服务器上处理,所以可能会慢得多

a == b

3 个答案:

答案 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()方法。