Я читав, що нерозумно використовувати ToUpper і ToLower для порівняння рядків, нечутливих до регістру, але не бачу альтернативи, коли мова заходить про LINQ-to-SQL. Аргументи ignoreCase і CompareOptions програми String.Compare ігноруються LINQ-to-SQL (якщо ви використовуєте базу даних, що враховує регістр, ви отримуєте порівняння з урахуванням регістру, навіть якщо просите порівняння, яке не враховує регістр). Тут найкращий варіант - ToLower або ToUpper? Чи один кращий за інший? Я думав, що десь прочитав, що ToUpper краще, але не знаю, чи це стосується тут. (Я роблю багато оглядів коду, і всі користуються ToLower.)
Dim s = From row In context.Table Where String.Compare(row.Name, "test", StringComparison.InvariantCultureIgnoreCase) = 0
Це перекладається на SQL-запит, який просто порівнює row.Name з "test" і не повертає "Test" та "TEST" на залежно від регістру бази даних.
LINQQuery.Contains("VaLuE", StringComparer.CurrentCultureIgnoreCase)
іLINQQuery.Except(new string[]{"A VaLUE","AnOTher VaLUE"}, StringComparer.CurrentCultureIgnoreCase)
. Ваху!