No hay búsqueda de texto completo integrada en LINQ y allí no parece haber muchos mensajes sobre el tema, así que tenían un juego alrededor y se acercó con este método para mi clase utlity:búsqueda de texto completo en LINQ
public static IEnumerable<TSource> GenericFullTextSearch<TSource>(string text, MyDataContext context)
{
//Find LINQ Table attribute
object[] info = typeof(TSource).GetCustomAttributes(typeof(System.Data.Linq.Mapping.TableAttribute), true);
//Get table name
String table = (info[0] as System.Data.Linq.Mapping.TableAttribute).Name;
//Full text search on that table
return context.ExecuteQuery<TSource>(String.Concat("SELECT * FROM ", table, " WHERE CONTAINS(*, {0})"), text);
}
y ha añadido este contenedor a cada clase parcial LINQ donde hay un índice de texto completo
public static IEnumerable<Pet> FullTextSearch(string text, MyDataContext context)
{
return (LinqUtilities.GenericFullTextSearch<Pet>(text, context) as IEnumerable<Pet>);
}
Así que ahora puedo hacer búsquedas de texto completo con cosas muy buenas como
var Pets = Pet.FullTextSearch(helloimatextbox.Text, MyDataContext).Skip(10).Take(10);
Supongo que solo es necesaria una búsqueda muy básica en este momento. ¿Alguien puede mejorar en esto? ¿Es posible implementarlo como método de extensión y evitar el contenedor?
Una cuestión peligrosa/unoptimal con respecto a su consulta es que el Saltee(). Take() se realizará en el lado del cliente, no en el lado del servidor. Por lo tanto, si realiza un FTS que devuelve 10^6 resultados y desea obtener los primeros 10, se devolverán todos los 10^6 de la base de datos, y solo entonces realizará el filtrado. –
Sí, en un conjunto de datos tan grande, estaría considerando otra técnica;) – ctrlalt3nd
Posible duplicado de [¿Es posible utilizar Búsqueda de texto completo (FTS) con LINQ?] (Http://stackoverflow.com/questions/224475/is -it-possible-to-use-full-text-search-fts-with-linq) –