Edw*_*vis 75 linq sql-server full-text-search
我想知道是否可以使用.NET Framework 3.5将FTS与LINQ一起使用.我正在搜索我没有找到任何有用的文档.
有没有人有这方面的经验?
Joh*_*ohn 76
是.但是你必须首先创建SQL服务器函数并默认调用它,LINQ将使用类似的.
这篇博文将解释细节,但这是摘录:
为了使它工作,您需要创建一个表值函数,它只根据您传入的关键字执行CONTAINSTABLE查询,
Run Code Online (Sandbox Code Playgroud)create function udf_sessionSearch (@keywords nvarchar(4000)) returns table as return (select [SessionId],[rank] from containstable(Session,(description,title),@keywords))
然后将此函数添加到LINQ 2 SQL模型中,并且他现在可以编写类似的查询.
Run Code Online (Sandbox Code Playgroud)var sessList = from s in DB.Sessions join fts in DB.udf_sessionSearch(SearchText) on s.sessionId equals fts.SessionId select s;
如果您不想创建联接并希望简化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))
)
Run Code Online (Sandbox Code Playgroud)
更新DBML后,在linq中使用它:
string searchKeyword = "word and subword";
var result = from ad in context.ad_Search(searchKeyword)
select ad;
Run Code Online (Sandbox Code Playgroud)
这将生成如下的简单SQL:
SELECT [t0].ID, [t0].Title, [t0].Description
FROM [dbo].[ad_Search](@p0) AS [t0]
Run Code Online (Sandbox Code Playgroud)
从ad_Search函数实现中可以看到,这可以通过多个列进行搜索.
小智 5
不,全文搜索是SQL Server特有的功能(在其中,文字是通过单词索引的,查询要遍历此索引而不是遍历字符数组)。Linq不支持此功能,任何.Contains()调用都会访问非托管字符串函数,但不会从索引中受益。
归档时间: |
|
查看次数: |
21787 次 |
最近记录: |