2009-05-04 41 views
1

我需要使用FreeTextTable(因爲我需要排名)與SubSonic查詢表。 AFAIK,Subsonic不支持FullText,所以我最終創建了一個簡單的UDF函數(表函數),它需要2個參數(關鍵字搜索和最大數量的結果)。 現在,我該如何使用此FreeTextTable內聯主表? InlineQuery不是一個選項。 示例:如何內部使用SubSonic參數加入UDF函數

表文章的字段標識,文章名稱,作者,ArticleStatus。

搜索可以通過以下一個或多個字段完成:ArticleName(fulltext),Author(另一個FullText但具有不同的搜索關鍵字),ArticleStatus(一個int)。

實際上查詢要複雜得多,並且有其他連接(取決於用戶的選擇)。

如果SubSonic無法處理這種情況,最好的解決方案可能是最好的老式普通SQL(所以不需要創建UDF)。

感謝您的幫助

PS:將亞音速3.0處理這種情況?

回答

0

3.0可以爲你做到這一點,但你需要爲它做一個模板,因爲我們不開箱即可處理函數。我將在未來幾周內對此進行研究 - 現在我認爲2.2不會爲你做到這一點。

0

我意識到你的問題比這個更復雜,但是你可以通過SubSonic 2.2獲得一個表值函數的結果並且有點按摩。

將.cs文件從生成的視圖中的一個複製到安全文件夾中,然後更改所有屬性以匹配由UDF返回的列。

然後,在你的集合上,添加一個帶參數的構造函數方法,讓它執行一個InlineQuery。

public partial class UDFSearchCollection 
{ 
    public UDFSearchCollection(){} 

    public UDFSearchCollection(string keyword, int maxResults) 
    { 
     UDFSearchCollection coll = new InlineQuery().ExecuteAsCollection<UDFSearchCollection>("select resultID, resultColumn from dbo.udfSearch(@keyword, @maxResults)",keyword,maxResults); 
     coll.CopyTo(this); 
     coll = null; 
    } 
} 

public partial class UDFSearch : ReadOnlyRecord<UDFSearch>, IReadOnlyRecord 
{ 
    //all the methods for read only record go here 
    ... 

} 

由於表格對象沒有自己的參數集合,所以內部聯接會有點困難。但它可以...

相關問題