Я читал, что неразумно использовать 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)
. Уаху!