sql >> Databáze >  >> RDS >> Sqlserver

Linq to Entities :pomocí ToLower() na polích NText

Nikdy nepoužívejte .ToLower() k provedení srovnání bez rozlišení velkých a malých písmen. Zde je důvod:

  1. Možná je to špatně (vaše řazení klientů může být řekněme turečtina, a řazení DB nikoli).
  2. Je to vysoce neefektivní; SQL Emitted je LOWER místo = s řazením bez rozlišení malých a velkých písmen.

Místo toho použijte StringComparison.OrdinalIgnoreCase nebo StringComparison.CurrentCultureIgnoreCase :

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

Ale pro Contains() je tu problém:Na rozdíl od Equals , StartsWith , atd., nemá přetížení pro StringComparison argument. Proč? Dobrá otázka; zeptejte se Microsoftu.

To v kombinaci s omezením SQL Serveru na LOWER znamená, že neexistuje jednoduchý způsob, jak dělat to, co chcete.

Možná řešení mohou zahrnovat:

  • Použijte fulltextový index a proveďte vyhledávání v proceduře.
  • Použijte Equals nebo StartsWith místo toho, pokud je to možné pro váš úkol
  • Změnit výchozí řazení sloupce?


  1. DATEDIFF() nebo BETWEEN pro rozsahy dat v dotazech SQL

  2. Jak zobrazit aktuální připojení v MySQL Workbench pomocí GUI

  3. Jak funguje ORDER BY RAND() MySQL?

  4. Postgresql Aktuální časové razítko při aktualizaci