我想知道是否可以使用.NET Framework 3.5将FTS与LINQ一起使用.我正在搜索我没有找到任何有用的文档.
有没有人有这方面的经验?
是.但是你必须首先创建SQL服务器函数并默认调用它,LINQ将使用类似的.
这篇博文将解释细节,但这是摘录:
为了使它工作,您需要创建一个表值函数,它只根据您传入的关键字执行CONTAINSTABLE查询,
create function udf_sessionSearch (@keywords nvarchar(4000)) returns table as return (select [SessionId],[rank] from containstable(Session,(description,title),@keywords))然后将此函数添加到LINQ 2 SQL模型中,并且他现在可以编写类似的查询.
var sessList = from s in DB.Sessions join fts in DB.udf_sessionSearch(SearchText) on s.sessionId equals fts.SessionId select s;
否.LINQ To SQL不支持全文搜索.
也就是说,您可以使用利用FTS的存储过程并让LINQ To SQL查询从中获取数据.
我不相信.您可以在字段上使用"包含",但它只会生成LIKE
查询.如果你想使用全文,我建议使用存储过程来执行查询,然后将其传递回LINQ
如果您不想创建联接并希望简化C#代码,则可以创建SQL函数并在"from"子句中使用它:
CREATE FUNCTION ad_Search ( @keyword nvarchar(4000) ) RETURNS TABLE AS RETURN ( select * from Ad where (CONTAINS(Description, @keyword) OR CONTAINS(Title, @keyword)) )
更新DBML后,在linq中使用它:
string searchKeyword = "word and subword"; var result = from ad in context.ad_Search(searchKeyword) select ad;
这将生成如下的简单SQL:
SELECT [t0].ID, [t0].Title, [t0].Description FROM [dbo].[ad_Search](@p0) AS [t0]
从ad_Search函数实现中可以看到,这可以通过多个列进行搜索.
不,全文搜索是SQL Server特有的功能(在其中,文字是通过单词索引的,查询要遍历此索引而不是遍历字符数组)。Linq不支持此功能,任何.Contains()调用都会访问非托管字符串函数,但不会从索引中受益。