Haga que Entity Framework use Contains en lugar de Like y explique 'ESCAPE ~'

c# entity-framework-6

Pregunta

Tengo una línea de LINQ que estoy usando en EF que básicamente está haciendo myTable.Where(c => c.Contains('mystring'));

Este es el código generado:

SELECT TOP (300) 
[Extent1].[ID] AS [ID], 
[Extent1].[FKFishEntityID] AS [FKFishEntityID], 
[Extent1].[Fish] AS [Fish], 
[Extent1].[FishText] AS [FishText], 
[Extent1].[FishType] AS [FishType]
FROM [dbo].[Fish] AS [Extent1]
WHERE [Extent1].[FishText] LIKE @p__linq__0 ESCAPE '~'

Mis dos preguntas son:

  • ¿Cómo hago para que use CONTAINS (...) en lugar de LIKE? Parece que LIKE es muy lento cuando la tabla usa la indexación de texto completo. Copiar y pegar la consulta demora 4 segundos en ejecutarse, pero si cambio LIKE to CONTAINS () se ejecuta instantáneamente.

  • ¿Por qué hace ESCAPE '~'? Al copiar y pegar esto en el servidor SQL, se ejecuta aproximadamente 4 veces más rápido si quito la parte 'ESCAPE'.

Respuesta aceptada

del [blog del framework de entidades]: 1

No hay soporte nativo para la búsqueda de texto completo planeada en este momento. Necesitarías usar una consulta de SQL en bruto.

Parece que el camino a seguir es algo como esto:

using (var context = new BloggingContext())
{
    var fishes = context.Fishes.SqlQuery("SELECT * FROM dbo.Fishes WHERE CONTAINS(FishText, @p0)", searchPhrase).ToList();
}



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué