2009-09-25 4 views
1

Ceci est une requête assez monstre que j'écris.L'union sur deux grandes requêtes LINQ n'est pas prise en charge. Comment puis-je contourner (si possible)

Une description très rapide de la base de données: Vous disposez d'une table d'images, une table imagetag, qui la joint à une table de variables. Les images peuvent avoir 0 ou plusieurs tags.

J'ai une requête qui fait une recherche en texte intégral sur la propriété de titre de l'image et cela fonctionne très bien. Toutefois, je le souhaite lorsque vous effectuez une recherche de texte intégral, il regarde également les noms de balises de l'image pour voir si quelque chose correspond. Par exemple, vous pourriez avoir une image avec un titre de "Awesome Cakes", qui a un tag de cuisine. Quand un utilisateur fait une recherche de texte complet de cuisson, il devrait trouver cette image, parce qu'il a une étiquette correspondante.

À droite? Comme je l'ai mentionné, j'ai ma méthode fulltext qui fonctionne et renvoie une liste d'images interrogeable.

J'ai également fait une méthode qui trouve des images avec des étiquettes correspondant à la requête en texte intégral

IQueryable<Image> results = imageService.FullTextSearch(MakeSearchTerm(freeText)); 
IQueryable<Image> tagResults = imageService.FullTextTagSearch(freeText, tagService); 

Quand je débugger et afficher les énumérations, ils ont tous deux résultats.

Ce que je veux faire est de les unir en un ensemble de résultats. La raison pour laquelle je veux faire cela, est plus tard le code, d'autres filtres sont appliqués aux résultats avant que la requête réelle est exécutée, comme le filtrage par auteur et ne prenant que les résultats nécessaires pour la page particulière.

Malheureusement, quand je tente de l'union:

results = results.Concat(tagResults).Distinct(); 

Types dans l'Union ou Concat ne peut être construit avec la hiérarchie.

Je comprends que cela pourrait ne pas être possible: p Mais je vois juste s'il y a des bonnes idées et des solutions, des acclamations.

+0

Ce ne va pas résoudre votre problème (je ne sais pas ce que le problème pourrait être), mais il est plus agréable à utiliser Union au lieu de Concat + Distinct. – Joren

+0

J'ai une publication sur MSDN qui décrit en outre un exemple de quand ce type d'exception se produit. http://social.msdn.microsoft.com/Forums/en/linqprojectgeneral/thread/99acd3a9-5cef-4075-91b3-84537bb4a3c9 – jpierson

Répondre

0

Je pense qu'il y a un problème dans la façon dont vous approchez de la recherche. Au lieu de renvoyer des images, vous devez introduire un type qui capture uniquement les métadonnées de l'image, avec une clé de l'image.

Je ne comprends pas exactement ce que "Types dans Union ou Concat ne peut pas être construit avec hiérarchie" devrait signifier cependant. Est-ce une exception?

+1

Ouais c'est une exception – qui

0

Je voudrais essayer de combiner les fonctions fulltextsearch et FullTextTagSearch en quelque chose comme ceci:

public IQueryable<Image> ImageSearch(string fullText) 
{ 
    return from image in ImageTable 
      where image.title.Contains(fullText) 
       || image.tagName.Contains(fullText) 
      select image; 
} 
Questions connexes