Linq avec Left Join sur la sous-Requête contenant le Comte
Je vais avoir de la difficulté à traduire en sql syntaxe linq.
J'ai 2 tables (Catégorie et CategoryListing) qui référence les uns les autres avec CategoryID. J'ai besoin d'obtenir une liste de tous les CategoryID dans la Catégorie Table et le nombre de CategoryID pour tous les matches de la CategoryListing table. Si un code de catégorie n'est pas présente dans CategoryListing, puis le code de catégorie doit encore être retournés, mais avec une fréquence de 0.
La requête sql suivante montre les résultats attendus:
SELECT c.CategoryID, COALESCE(cl.frequency, 0) as frequency
FROM Category c
LEFT JOIN (
SELECT cl.CategoryID, COUNT(cl.CategoryID) as frequency
FROM CategoryListing cl
GROUP BY cl.CategoryID
) as cl
ON c.CategoryID = cl.CategoryID
WHERE c.GuideID = 1
OriginalL'auteur Jay Walker | 2009-02-18
Vous devez vous connecter pour publier un commentaire.
Pas testé, mais cela devrait faire l'affaire:
Je ne crois pas qu'il n'y a vraiment aucune une telle chose comme une jointure gauche dans LINQ...
Oh! my bad, la corriger. juste une seconde
Il fixe. Elle a besoin d'une clause into et un defaultifempty (qui résulte en une groupjoin + defaultifempty appel, deux de mes choses préférées à la haine sur linq comme ils font de l'écriture un fournisseur linq un véritable enfer ;))
Barnwell: Vous pouvez le faire à gauche rejoint dans linq par l'utilisation de joindre et d'égal à égal. Pour les jointures internes, au lieu d'utiliser la jointure mot-clé, vous devez utiliser la capacité relationnelle des objets.
OriginalL'auteur Frans Bouma
Je suis allé de l'avant et a déménagé l'ensemble de la requête à une Procédure Stockée dans la base de données. Cela résout le problème en évitant LINQ en premier lieu.
OriginalL'auteur Vaiden