【问题标题】:How to Inner Join an UDF Function with parameters using SubSonic如何使用 SubSonic 内部加入带有参数的 UDF 函数
【发布时间】:2010-01-30 23:00:05
【问题描述】:

我需要使用 FreeTextTable(因为我需要排名)和 SubSonic 来查询表。 AFAIK,Subsonic 不支持全文,所以我最终创建了一个简单的 UDF 函数(表函数),它需要 2 个参数(搜索关键字和最大结果数)。 现在,我怎样才能用这个 FreeTextTable 内部加入主表? InlineQuery 不是一个选项。 示例:

表 ARTICLE 包含字段 Id、ArticleName、Author、ArticleStatus。

可以通过以下多个字段之一进行搜索:ArticleName(全文)、作者(另一个全文但具有不同的搜索关键字)、ArticleStatus(一个整数)。

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

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

感谢您的帮助

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

【问题讨论】:

    标签: subsonic


    【解决方案1】:

    3.0 可以为您做到这一点,但您需要为它制作一个模板,因为我们还没有处理开箱即用的功能。我将在接下来的几周内进行这项工作 - 目前我认为 2.2 不会为您完成这项工作。

    【讨论】:

      【解决方案2】:

      我知道您的问题比这更复杂,但您可以通过 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
          ...
      
      }
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-13
        • 2020-12-20
        • 2019-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-28
        • 1970-01-01
        相关资源
        最近更新 更多