오늘 나는 Subsonic을 배우려고 노력하고 있습니다. 꽤 멋진 재료.
내 웹 사이트에 검색 기능을 추가하려고하지만 Subsonic에서이를 달성하는 방법에 대해 고심하고 있습니다.
하나의 검색 필드에 여러 개의 키워드가 포함될 수 있습니다. 모든 키워드와 일치하는 결과를 반환하고 싶습니다. 검색 대상은 단일 텍스트 열입니다.
은 지금까지 나는 (그것을 실행 없지만 결코 결과를 반환)이 있습니다
return new SubSonic.Select().From(Visit.Schema)
.InnerJoin(InfopathArchive.VisitIdColumn, Visit.VisitIdColumn)
.Where(InfopathArchive.XmlDocColumn).Like(keywords)
.ExecuteTypedList<Visit>();
이 방문 테이블과 InfoPathArchive 테이블 사이의 일대일 매핑이 있습니다. 관련 XMLDocColumn에 키워드가있는 방문수 컬렉션을 반환하기 만하면됩니다.
내가 그 일을 할 수 있다면 좋을 것입니다. 이제 두 번째 문제는 누군가가 'australia processmodel'을 검색하면 분명히 위의 코드는 정확한 구문만을 반환해야한다는 것입니다. 검색 용어를 분할하여 모든 개별 검색어가 포함 된 문서를 반환해야하는 검색어를 만들려면 어떻게해야합니까?
도움을 주시면 감사하겠습니다.
편집 : 좋아, 기본 검색 작동하지만 여러 키워드 검색 doesnt. 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