Non c'è ricerca a testo integrale integrato in Linq e là non sembrano essere molti messaggi su tema così ho avuto un gioco intorno e si avvicinò con questo metodo per la mia classe utlity:testo Cerca in 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);
}
E ha aggiunto questo wrapper per ogni classe parziale LINQ in cui v'è un indice completo
public static IEnumerable<Pet> FullTextSearch(string text, MyDataContext context)
{
return (LinqUtilities.GenericFullTextSearch<Pet>(text, context) as IEnumerable<Pet>);
}
Così ora posso fare ricerche full text con roba pulita come
var Pets = Pet.FullTextSearch(helloimatextbox.Text, MyDataContext).Skip(10).Take(10);
Suppongo che al momento sia necessaria solo una ricerca di base. Qualcuno può migliorare su questo? È possibile implementare come metodo di estensione ed evitare il wrapper?
One/problema unoptimal pericoloso per quanto riguarda la vostra richiesta è che il .Skip(). Take() verrà eseguito lato client, non lato server. Quindi se fai un FTS che restituisce 10^6 risultati e vuoi avere solo i primi 10, tutti 10^6 di essi saranno restituiti dal database, e solo allora eseguirai il filtraggio. –
Sì, su un set di dati che sarebbe grande considerando un'altra tecnica;) – ctrlalt3nd
Possibile duplicato di [È possibile utilizzare la ricerca di testo completo (FTS) con LINQ?] (Http://stackoverflow.com/questions/224475/is -it-possibile-usare-full-text-search-fts-with-linq) –