Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Linq to Entities :używanie ToLower() na polach NText

Nigdy nie używaj .ToLower() wykonać porównanie bez rozróżniania wielkości liter. Oto dlaczego:

  1. Prawdopodobnie jest źle (twój klient może być, powiedzmy, turecki, a twój DB nie).
  2. Jest bardzo nieskuteczny; Emitowany kod SQL to LOWER zamiast = z sortowaniem bez rozróżniania wielkości liter.

Zamiast tego użyj StringComparison.OrdinalIgnoreCase lub StringComparison.CurrentCultureIgnoreCase :

var q = from f in Context.Foos
        where f.Bar.Equals("hi", StringComparison.OrdinalIgnoreCase)
        select f;

Ale dla Contains() jest problem:w przeciwieństwie do Equals , StartsWith itp., nie ma przeciążenia dla StringComparison argument. Czemu? Dobre pytanie; zapytaj Microsoft.

To w połączeniu z ograniczeniami SQL Server dotyczącymi LOWER oznacza, że ​​nie ma prostego sposobu na zrobienie tego, co chcesz.

Możliwe obejścia mogą obejmować:

  • Użyj indeksu pełnotekstowego i przeprowadź wyszukiwanie zgodnie z procedurą.
  • Użyj Equals lub StartsWith zamiast tego, jeśli to możliwe dla twojego zadania
  • Zmienić domyślne sortowanie kolumny?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zwracaj wiersze dokładnie w kolejności, w jakiej zostały wstawione

  2. Jak uciec od ciągów znaków w SQL Server przy użyciu PHP?

  3. Wykrywanie odwołań cyklicznych w SQL

  4. jak uzyskać nazwę schematu tabeli?

  5. Jak używać aliasu w klauzuli where?