我需要使用FreeSxtTable查询表(因为我需要排名),使用SubSonic。 AFAIK,Subsonic不支持FullText,所以我最终创建了一个简单的UDF函数(表函数),该函数需要2个参数(搜索关键字和最大结果数)。 现在,我如何使用此FreeTextTable内连接主表? InlineQuery不是一个选项。 例如:
表格带有字段ID,ArticleName,Author,ArticleStatus。
搜索可以通过以下其中一个字段完成:ArticleName(全文),作者(另一个FullText但具有不同的搜索关键字),ArticleStatus(一个int)。
实际上,查询要复杂得多,还有其他连接(取决于用户选择)。
如果SubSonic无法处理这种情况,可能最好的解决方案是使用旧的普通sql(因此也不需要创建UDF)。
感谢您的帮助
ps:SubSonic 3.0会处理这种情况吗?
答案 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
...
}
内部联接会有点困难,因为表对象没有自己的参数集合。但它可以......