如何内部使用SubSonic使用参数加入UDF函数

时间:2009-05-04 14:11:45

标签: subsonic

我需要使用FreeSxtTable查询表(因为我需要排名),使用SubSonic。 AFAIK,Subsonic不支持FullText,所以我最终创建了一个简单的UDF函数(表函数),该函数需要2个参数(搜索关键字和最大结果数)。 现在,我如何使用此FreeTextTable内连接主表? InlineQuery不是一个选项。 例如:

表格带有字段ID,ArticleName,Author,ArticleStatus。

搜索可以通过以下其中一个字段完成:ArticleName(全文),作者(另一个FullText但具有不同的搜索关键字),ArticleStatus(一个int)。

实际上,查询要复杂得多,还有其他连接(取决于用户选择)。

如果SubSonic无法处理这种情况,可能最好的解决方案是使用旧的普通sql(因此也不需要创建UDF)。

感谢您的帮助

ps:SubSonic 3.0会处理这种情况吗?

2 个答案:

答案 0 :(得分:0)

3.0可以为你做这个,但是你需要为它做一个模板,因为我们还没有开箱即用的功能。我将在未来几周内研究这个问题 - 现在我不认为2.2会为你做这件事。

答案 1 :(得分: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
    ...

}

内部联接会有点困难,因为表对象没有自己的参数集合。但它可以......