好吧,亞音速搜索查詢
今天我正在學亞音速。非常酷的東西。
我試圖建立一些搜索功能到我的網站,但我在努力,我怎麼可能會在亞音速實現這一目標。
我有一個搜索字段可能包含多個關鍵字。我想返回匹配所有關鍵字的結果。搜索目標是單個文本列。
到目前爲止,我有這個(它運行,但不會返回結果):
return new SubSonic.Select().From(Visit.Schema)
.InnerJoin(InfopathArchive.VisitIdColumn, Visit.VisitIdColumn)
.Where(InfopathArchive.XmlDocColumn).Like(keywords)
.ExecuteTypedList<Visit>();
還有就是訪問表和InfoPathArchive表之間的一對一的映射。我只想返回在相關XMLDocColumn中具有關鍵字的訪問集合。
如果我能做到這一點,它會很好。現在第二個問題是,如果有人搜索「澳大利亞processmodel」,那麼顯然上面的代碼應該只返回該確切的短語。如何創建一個查詢來分割我的搜索詞,以便它必須返回包含所有單個搜索詞的文檔?
任何幫助表示讚賞。
編輯:好吧,所以基本的搜索工作,但多關鍵字搜索沒有。我做了Adam的建議,但似乎Subsonic只使用一個參數進行查詢。
下面是代碼:
List<string> wordsInQueryList = keywords.Split(' ').ToList();
SqlQuery q = Select.AllColumnsFrom<Visit>()
.InnerJoin(InfopathArchive.VisitIdColumn, Visit.VisitIdColumn)
.Where(Visit.IsDeletedColumn).IsEqualTo(false);
foreach(string wordInQuery in wordsInQueryList)
{
q = q.And(InfopathArchive.XmlDocColumn).Like("%" + wordInQuery + "%");
}
返回q.ExecuteTypedList();
然後,如果我看的是亞音速生成查詢:
SELECT (bunch of columns)
FROM [dbo].[Visit]
INNER JOIN [dbo].[InfopathArchive] ON [dbo].[Visit].[VisitId] = [dbo].[InfopathArchive].[VisitId]
WHERE [dbo].[Visit].[IsDeleted] = @IsDeleted
AND [dbo].[InfopathArchive].[XmlDoc] LIKE @XmlDoc
AND [dbo].[InfopathArchive].[XmlDoc] LIKE @XmlDoc
所以它結束了,只有最後一個關鍵字被搜索。
任何想法?
這是以前版本的Subsonic中的錯誤嗎?我使用2.1,並沒有真正的升級選項。 – Alex 2009-06-21 11:26:25