5

FREETEXT() CONTAINS()標準のLinqToSqlクエリ構文を使用して任意の数のキーワードに対して全文検索()を実行する良い方法を思いついた人はいますか?

明らかに、ストアドプロシージャを使用したり、動的SQL呼び出しを生成したりする必要はありません。

明らかに、FREETEXT()またはCONTAINS()を使用するSPROCにパラメーターの検索文字列を送り込むこともできますが、検索をよりクリエイティブにして、次のようなクエリを作成したいと考えていました。

「アップルパイ」ではなく、「ペパロニピザ」とハンバーガー。

クレイジー私は知っています-しかし、LinqToSqlから直接これを行うことができるのは素晴らしいことではないでしょうか?これを達成するためのヒントをいただければ幸いです。

更新:私はここで何かに取り組んでいる可能性があると思います...

また、質問のタイトルに加えられた変更は、実際に質問の意味が変わったため、ロールバックしました。LinqToSqlでは全文検索がサポートされていないことを知っています-それを知りたければ、その質問をしたでしょう。代わりに-私は編集-幸せ-引き金-指の大衆をなだめるために私のタイトルを更新しました。

4

2 に答える 2

5

テーブル値関数を使用して全文検索コンポーネントをカプセル化し、それをLINQ式内で参照して、実行の遅延の利点を維持することで、これを回避することができました。

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)));

ここで、「tvf_SearchStories」は、全文検索を内部的に使用するテーブル値関数です。

于 2008-12-12T02:05:21.650 に答える
4

残念ながら、LINQtoSQLは全文検索をサポートしていません。

Lucene.NET、NHibernateSearchが思い浮かびます。NHibernateのLINQをNHibernateSearchと組み合わせると、おそらくその機能が提供されますが、どちらもまだベータ版の深さです。

于 2008-09-15T22:51:15.960 に答える