Dot-Net

不區分大小寫的字元串與 linq-to-sql 和 linq-to-objects 進行比較

  • March 5, 2010

另請參閱LINQ to Objects 和 LINQ to SQL 查詢之間的差異

我們正在對我們的數據庫記憶體對象使用****一些查詢。

將不敏感字元串與 linq-to-sql 進行比較的最佳方法是什麼?

  • 它在 SQL Server 上執行速度很快
  • 相同的查詢表達式可以與 linq-to-objects 一起使用以獲得相同的結果

使用

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

至少得到相同的結果,但據我所知,它並沒有在 SQL 伺服器上得到處理,所以可能會慢很多

a == b

SQL 數據庫中的區分大小寫由排序規則設置確定。預設情況下,我認為大多數數據庫不區分大小寫,因此您應該檢查是否確實需要顯式處理區分大小寫。

在排序規則設置中SQL_Latin1_General_CP1_CI_AS- CI代表不區分大小寫,AS代表區分重音。

不幸的是,Linq-to-Sql 忽略了額外的參數,String.Compare()因此您將無法顯式設置區分大小寫以進行比較。但是,它將與 linq to objects 一起使用。

如果您使用區分大小寫的排序規則,則可以使用類似SqlMethods.Like(field, "string")使用 LIKE 查詢(不區分大小寫)之類的方法,但這不會轉換為對象的 linq。

以下是 LINQ to SQL 中支持的字元串操作列表,顯然可以在 LINQ to 對像中使用:http: //msdn.microsoft.com/en-us/library/bb882672.aspx

我個人沒有評估每一個的性能,但是 LINQ to SQL 不支持 ToLower 和 ToUpper,所以看起來比較是一個很好的候選者。您可以使用 LINQPad 之類的工具探索翻譯後的 SQL,該工具有免費版本,可將查詢翻譯成數據庫 SQL,並查看它如何針對 DB 執行。

此外,LINQ to Objects 可能會有所不同,因此對一個有利的可能對另一個不利……

引用自:https://stackoverflow.com/questions/2388022