好吧,亚音速搜索查询
今天我正在学亚音速。非常酷的东西。
我试图建立一些搜索功能到我的网站,但我在努力,我怎么可能会在亚音速实现这一目标。
我有一个搜索字段可能包含多个关键字。我想返回匹配所有关键字的结果。搜索目标是单个文本列。
到目前为止,我有这个(它运行,但不会返回结果):
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