我正在使用Linq to SQL调用一个存储过程,该过程运行全文搜索并返回列组以及表中的一些特定列。
Article
. rank列是从SQL函数freetexttable()返回的秩。我已经用返回类型将这个存储过程添加到O/R设计器中
文章
.
这是为了获得我需要的列;但是,它会丢弃每个搜索结果的排名。我想获取此信息以便向用户显示。
到目前为止,我已经尝试创建一个新的类
RankedArticle
继承自
文章
并添加列
Rank
,然后将存储过程映射的返回类型更改为
大文章
. 尝试此操作时,将引发InvalidOperationException:
“heap.models.article”类型的数据成员“Int32 ArticleID”不是“rankedarticle”类型的映射的一部分。成员是否位于继承层次结构的根之上?
如果让O/R设计器设置存储过程自己的返回类型,它将返回一个int而不是“searchArticlesByKeywordResult”对象。我不知道为什么会这样,也许是因为存储过程返回了一个联合?这是我的程序:
BEGIN
SET NOCOUNT ON;
(
SELECT ftt.[rank] as [Rank], ArticleID, Subject
FROM Article
INNER JOIN FREETEXTTABLE( Article, (Subject, Body), @KeywordList ) AS ftt
ON ftt.[key] = Article.ArticleID
UNION
SELECT ftt.[rank] as [Rank], Article.ArticleID as ArticleID, Article.Subject as Subject
FROM Article
INNER JOIN Solution ON Solution.ArticleID = Article.ArticleID
INNER JOIN FREETEXTTABLE( Solution, Body, @KeywordList ) AS ftt
ON ftt.[key] = Solution.SolutionID
)
ORDER BY [Rank] DESC
END
我似乎找不到任何其他的问题或谷歌搜索结果的人试图获得排名栏,所以我可能错过了一些明显的东西。