Disons que j'ai le schéma suivantRequête LinqToSql qui couvre une relation many-to-many?
Content(Id, ....)
TagContent(TagId, ContentId)
Tag(TagId, Name)
Supposons que je voudrais sélectionner tous les enregistrements de contenu qui ont étiquette avec le nom « test ».
Dans SQL Je voudrais écrire:
select Content.Id
from Content
join TagContent as TC on (TC.ContentId = Content.Id)
Join Tag on (TC.TagId = Tag.Id)
where Tag.Name = 'Test'
Pourriez-vous suggérer comment écrire une requête similaire dans Linq si vous avez seulement le tableau disponible? (Je voudrais créer une méthode d'extension Content.ByTag (« tag ») -> IQueryable)
Je n'ai réussi à créer une requête qui utilise l'instruction SQL exists
au lieu de join
. Cela signifie que les requêtes sont extrêmement inefficaces.
Ma solution inefficace actuelle se présente comme suit:
DataContext.Contents.Where(c => c.TagContents.Any(tc => tc.Tag.Name == "Test"))
REMARQUE: Comme je voudrais faire la méthode d'extension sur DataContext.Contents je ne vais pas avoir accès à d'autres tables qui est DataContext .Tag et DataContext.ContentTag.
Dans mon extension menthod Je n'ai pas accès à TagContents et Tag –
ahh je vois où votre problème. –