Frage

Hat jemand kommen mit einem guten Weg, eine Volltextsuche durchzuführen (FREETEXT() CONTAINS()) für eine beliebige Anzahl beliebiger Schlüsselwort Standard LinqToSql Abfragesyntax mit?

Ich würde natürlich gerne vermeiden, eine gespeicherte Proc verwenden oder eine dynamische SQL-Aufrufe generieren müssen.

Natürlich könnte ich die Pumpe nur die Suchzeichenfolge in auf einem Parameter zu einem SPROC der FREETEXT- () oder ENTHäLT () verwendet, aber ich habe gehofft, mit der Suche kreativer zu sein und Abfragen aufbauen wie:

"Peperoni-Pizza" und Burger, nicht "Apfelkuchen".

Crazy ich weiß - aber wäre es nicht ordentlich sein, um diese von LinqToSql direkt zu tun? Irgendwelche Tipps, wie dies zu erreichen würde sehr geschätzt werden.

Update: Ich glaube, ich auf etwas sein kann, hier .. .

Auch: Ich rollte die Änderung auf meine Frage Titel gemacht zurück, weil es tatsächlich die Bedeutung geändert, was ich frage. I weiß , die Volltextsuche nicht in LinqToSql unterstützt wird - ich würde diese Frage gestellt haben, ob ich das wissen wollte. Stattdessen -. Ich habe aktualisiert meinen Titel Editier-happy-Trigger-Finger-Massen zu beschwichtigen

War es hilfreich?

Lösung

Leider LINQ to SQL unterstützt nicht die Volltextsuche.

Es gibt eine Reihe von Produkten gibt, die ich denken konnte: Lucene.NET, NHibernate Suche in den Sinn kommt. LINQ für NHibernate kombiniert mit NHibernate suchen würde wahrscheinlich diese Funktionalität geben, aber beide sind noch bis tief in der Beta.

Andere Tipps

Ich habe zu verwalten, dies zu umgehen, indem Sie eine Tabellenwertfunktion mit der Volltextsuche Komponente verkapseln, dann bezeichnen es in meinem LINQ Ausdruck die Vorteile der verzögerten Ausführung beibehalten:

string q = query.Query;
IQueryable<Story> stories = ActiveStories
                        .Join(tvf_SearchStories(q), o => o.StoryId, i => i.StoryId, (o,i) => o)
                        .Where (s => (query.CategoryIds.Contains(s.CategoryId)) &&
                                    /* time frame filter */
                                (s.PostedOn >= (query.Start ?? SqlDateTime.MinValue.Value)) &&
                                (s.PostedOn <= (query.End ?? SqlDateTime.MaxValue.Value)));

Hier tvf_SearchStories 'ist die Tabellenwertfunktion, die intern zur Volltextsuche verwendet

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top