Es gibt keine Volltextsuche in Linq gebaut und es scheint nicht viele Beiträge zu dem Thema zu sein, so hatte ich ein Spiel um und kamen mit dieser Methode für meine utlity Klasse bis:Volltextsuche 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);
}
Und hinzugefügt, um diese Wrapper jeden Teil Linq Klasse, wo es einen Volltextindex
public static IEnumerable<Pet> FullTextSearch(string text, MyDataContext context)
{
return (LinqUtilities.GenericFullTextSearch<Pet>(text, context) as IEnumerable<Pet>);
}
So jetzt habe ich eine Volltextsuche mit netten Dingen wie
var Pets = Pet.FullTextSearch(helloimatextbox.Text, MyDataContext).Skip(10).Take(10);
tun kann
Ich gehe davon aus, dass derzeit nur eine sehr einfache Suche notwendig ist. Kann jemand das verbessern? Ist es möglich, als Erweiterungsmethode zu implementieren und den Wrapper zu vermeiden?
Eine gefährliche/unoptimal Frage in Bezug auf Ihre Frage ist, dass die .skip(). Take() wird clientseitig, nicht serverseitig ausgeführt. Wenn Sie also ein FTS machen, das 10^6 Ergebnisse liefert und Sie wollen nur die ersten 10 haben, werden alle 10^6 von der Datenbank zurückgegeben, und nur dann führen Sie die Filterung durch. –
Aye, bei einem so großen Datensatz würde ich eine andere Technik in Erwägung ziehen;) – ctrlalt3nd
Mögliches Duplikat von [Ist es möglich, die Volltextsuche (FTS) mit LINQ zu verwenden?] (Http://stackoverflow.com/questions/224475/is -it-possible-to-use-Volltextsuche-fts-with-linq) –