Czytałem, że nierozsądne jest używanie ToUpper i ToLower do porównywania ciągów bez uwzględniania wielkości liter, ale nie widzę alternatywy, jeśli chodzi o LINQ-to-SQL. Argumenty ignoreCase i CompareOptions String.Compare są ignorowane przez LINQ-to-SQL (jeśli używasz bazy danych z uwzględnieniem wielkości liter, otrzymasz porównanie z rozróżnianiem wielkości liter, nawet jeśli poprosisz o porównanie bez uwzględniania wielkości liter). Czy ToLower lub ToUpper jest tutaj najlepszą opcją? Czy jeden jest lepszy od drugiego? Myślałem, że gdzieś czytałem, że ToUpper jest lepsze, ale nie wiem, czy to dotyczy tutaj. (Robię wiele recenzji kodu i wszyscy używają ToLower.)
Dim s = From row In context.Table Where String.Compare(row.Name, "test", StringComparison.InvariantCultureIgnoreCase) = 0
Przekłada się to na zapytanie SQL, które po prostu porównuje parametr row.Name z wartością „test” i nie zwraca wartości „Test” ani „TEST” w bazie danych uwzględniającej wielkość liter.
LINQQuery.Contains("VaLuE", StringComparer.CurrentCultureIgnoreCase)
iLINQQuery.Except(new string[]{"A VaLUE","AnOTher VaLUE"}, StringComparer.CurrentCultureIgnoreCase)
. Wahoo!