Ok,Requête de recherche avec Subsonic
Aujourd'hui j'essaie d'apprendre Subsonic. Des trucs plutôt cool. J'essaie d'intégrer certaines fonctionnalités de recherche dans mon site Web, mais je n'arrive pas à comprendre comment je pourrais y parvenir avec Subsonic.
J'ai un champ de recherche qui pourrait contenir plusieurs mots-clés. Je souhaite renvoyer des résultats correspondant à tous les mots clés. La cible de la recherche est une colonne de texte unique.
Jusqu'à présent, j'ai ce (il fonctionne, mais ne retourne jamais les résultats):
return new SubSonic.Select().From(Visit.Schema)
.InnerJoin(InfopathArchive.VisitIdColumn, Visit.VisitIdColumn)
.Where(InfopathArchive.XmlDocColumn).Like(keywords)
.ExecuteTypedList<Visit>();
Il y a un à un entre la table de visite et la table InfoPathArchive. Je veux juste retourner la collection de visites qui ont les mots-clés dans le XMLDocColumn connexe.
Si je pouvais faire fonctionner ça, ce serait génial. Maintenant, le deuxième problème est que si quelqu'un cherche 'australia processmodel' alors évidemment le code ci-dessus ne devrait renvoyer que cette phrase exacte. Comment puis-je créer une requête qui scinde mon terme de recherche afin qu'il renvoie des documents contenant TOUS les termes de recherche individuels?
Toute aide appréciée. Edit: Ok, donc la recherche de base fonctionne, mais la recherche par mot-clé multiple ne fonctionne pas. J'ai fait ce qu'Adam a suggéré mais il semble que Subsonic n'utilise qu'un seul paramètre pour la requête.
Voici le code:
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 de retour();
Alors si je regarde la requête qui génère Subsonic:
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
Il finit que seul le dernier mot-clé est recherché.
Des idées?
Est-ce un bug dans les versions précédentes de Subsonic? Im utilisant 2.1 et n'ont pas vraiment l'option de mise à niveau à ce stade. – Alex