La consulta de Linq no se comporta como se esperaba

 C Programming >> Programación C >  >> Tags >> LINQ
La consulta de Linq no se comporta como se esperaba

Si tu texto tiene NVARCHAR verifique el tipo de datos para letras similares que en realidad no son las mismas:

CREATE TABLE #employee (ID INT IDENTITY(1,1), EmployeeName NVARCHAR(100));

INSERT INTO #employee(EmployeeName) VALUES (N'waidаnde');

SELECT *
FROM #employee
WHERE EmployeeName LIKE '%waidande%';

-- checking
SELECT *
FROM #employee
WHERE CAST(EmployeeName AS VARCHAR(100)) <> EmployeeName;

db<>demostración de violín

Aquí:'а' !='a' . Uno es de Cyrillic 'a' y el segundo es normal.

Idea extraída de:

Diapositiva de:http://sqlbits.com/Sessions/Event12/Revenge_The_SQL

PD Recomiendo ver la charla de Rob Volk:Revenge: The SQL! .


Para solucionar el problema, determine si el problema está en el lado EF o en el lado DB. Un error común es el espacio en blanco adicional, así que asegúrese de que no sea el caso antes de continuar.

Primero verifique qué consulta está generando EF, puede usar uno de los siguientes métodos para hacer esto

  1. Método ObjectQuery.ToTraceString()
  2. Registro EF de llamadas db interceptadas
  3. Generador de perfiles de servidor Sql

Si está utilizando EF correctamente y su consulta se traduce a SQL como se esperaba y contiene los predicados en la sección where, pero aún no obtiene ningún resultado significativo, aquí hay algunas ideas para probar en el lado de la base de datos:

  1. Compruebe la intercalación (tenga en cuenta que se puede configurar en el servidor, la base de datos y el nivel de columna individual):tenga cuidado con la distinción entre mayúsculas y minúsculas y la página de códigos que se está utilizando
  2. Verifique que su cadena de búsqueda contenga símbolos que se puedan interpretar en la página de códigos de la base de datos; por ejemplo, si la página de códigos es 252:Windows Latin 1 ANSI y está enviando una entrada con símbolos de UTF-16 que están fuera de ANSI; ganó. no obtendrá ningún resultado, aunque los símbolos se vean iguales
  3. Altamente improbable, pero como último recurso, verifique si una de sus consultas no se ha almacenado en caché, como se describe aquí