2008-09-15 15 views
5

有沒有人想出使用標準LinqToSql查詢語法爲任意數量的任意關鍵字執行全文搜索(FREETEXT() CONTAINS())的好方法?LinqToSql和全文搜索 - 可以完成嗎?

我很想避免使用Stored Proc或必須生成動態SQL調用。

很顯然,我可以只抽搜索字符串中的一個參數來使用FREETEXT()或者包含()一個存儲過程,但我希望能與更多的創意,並建立類似的查詢:

「意大利辣香腸比薩餅」和漢堡,而不是「蘋果派」。

瘋狂我知道 - 但是不能直接從LinqToSql做到這一點嗎?任何提示如何實現這一點將不勝感激。

更新:我想我可能將要發生什麼here ...

另外:我退回到我的問題的標題進行了更改,因爲它實際上改變了我問什麼意思。我知道 LinqToSql不支持全文搜索 - 如果我想知道,我會問這個問題。相反 - 我已更新我的標題以安撫編輯樂意觸發指尖的羣衆。

回答

4

不幸的是,LINQ to SQL不支持全文搜索。

有一些產品在那裏,我認爲可以:Lucene.NET,NHibernate搜索浮現在腦海。將NHibernate的NHibernate與NHibernate Search結合起來可能會提供這種功能,但兩者在測試中都還很深入。

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:

+0

嘿喬恩,謝謝你。原則上我對你的回答感到滿意,並且知道我可以在其中添加另一個抽象層。不理想的tho - 也可以寫CONTAINS()SPROC並使用Linq來處理其他每一個。我的問題是「可以使用Linq完成」嗎?如果不是,那麼你的答案就足夠了。 – RobertTheGrey 2008-09-16 08:24:35

5

我已經設法通過使用一個表值函數來封裝全文搜索組件來解決這個問題,那麼我的LINQ表達維持延遲執行的好處內引用它'是內部使用全文搜索的表值函數

相關問題