Li que não é aconselhável usar o ToUpper e o ToLower para realizar comparações de seqüências que não diferenciam maiúsculas de minúsculas, mas não vejo alternativa quando se trata de LINQ-to-SQL. Os argumentos ignoreCase e CompareOptions de String.Compare são ignorados pelo LINQ-to-SQL (se você estiver usando um banco de dados com distinção entre maiúsculas e minúsculas, você obtém uma comparação com distinção entre maiúsculas e minúsculas, mesmo que solicite uma comparação sem distinção entre maiúsculas e minúsculas). ToLower ou ToUpper é a melhor opção aqui? Um é melhor que o outro? Pensei ter lido em algum lugar que o ToUpper era melhor, mas não sei se isso se aplica aqui. (Estou fazendo muitas revisões de código e todo mundo está usando o ToLower.)
Dim s = From row In context.Table Where String.Compare(row.Name, "test", StringComparison.InvariantCultureIgnoreCase) = 0
Isso se traduz em uma consulta SQL que simplesmente compara row.Name com "test" e não retornará "Test" e "TEST" em um banco de dados com distinção entre maiúsculas e minúsculas.
LINQQuery.Contains("VaLuE", StringComparer.CurrentCultureIgnoreCase)
eLINQQuery.Except(new string[]{"A VaLUE","AnOTher VaLUE"}, StringComparer.CurrentCultureIgnoreCase)
. Wahoo!