2010-11-22 4 views
1

Disons que j'ai deux tables dans Entity Framework, Library et Book. Ceux-ci sont sur plusieurs à se joindre à une autre table inbetween appelée Library_Book mais elle est cachée car c'est la table de jointure. Comment vérifier à l'aide de LINQ si une bibliothèque a un certain livre en interrogeant la table de jointure (qui n'a pas sa propre classe dans Entity Framework) sans retourner la liste de tous les livres dans une bibliothèque de la table de jointure mais à la place seulement l'enregistrement qui a le bookId et le LibraryId.Interrogation d'une table plusieurs à plusieurs dans l'infrastructure d'entité

Merci beaucoup à l'avance.

+0

double possible: [LINQ et Entity comment puis-je retourner les valeurs d'un grand nombre à plusieurs rapports] (http://stackoverflow.com/questions/4235978/using-linq -et-entité-comment-faire-je-renvoie-des-valeurs-d'une-plusieurs-à-plusieurs-relation/4235997 # 4235997) –

Répondre

1

Pour déterminer si la bibliothèque connue a un livre connu, vous pouvez faire quelque chose comme ceci:

bool hasIt = (from l in Libraries from b in l.Books where b.Id == 5 where l.Id == 3 
select l).Any(); 

Cette requête Linq ne touche pas non plus la bibliothèque ou de la table Livres. Il ressemblera à ceci:

SELECT 
CASE WHEN (EXISTS (SELECT 
    1 AS [C1] 
    FROM [dbo].[LibraryBookIntersection] AS [Extent1] 
    WHERE (5 = [Extent1].[BookId]) AND (3 = [Extent1].[LibraryId]) 
)) THEN cast(1 as bit) WHEN (NOT EXISTS (SELECT 
    1 AS [C1] 
    FROM [dbo].[LibraryBookIntersection] AS [Extent2] 
    WHERE (5 = [Extent2].[BookId]) AND (3 = [Extent2].[LibraryId]) 
)) THEN cast(0 as bit) END AS [C1] 
FROM (SELECT 1 AS X) AS [SingleRowTable1] 
+0

merci pour la réponse. J'ai mis en place quelques valeurs dans la table de jointure Library_Book et ai testé l'instruction LINQ ci-dessus mais elle retourne parfois vrai quand j'attends faux et vice versa. Il semble sparadique. Des idées sur pourquoi cela peut-être? – user375564

+0

@ user375564 vous devrez poster votre requête Linq, puis montrez-moi le TSQL que vous utilisez pour valider que le vrai ou le faux n'est pas correct. –

+0

bool hasIt = (de l dans _ctx.Liraries de b dans _ctx.Books où l.Id == 1 où b.Id == 3 sélectionnez l) .Any(); Le premier renvoie hasIt = True mais la seconde instruction renvoie 0 comme il se doit – user375564

Questions connexes