不區分大小寫的字元串與 linq-to-sql 和 linq-to-objects 進行比較
另請參閱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 可能會有所不同,因此對一個有利的可能對另一個不利……