Maison > développement back-end > C++ > Comment effectuer une jointure externe gauche LINQ to SQL avec un filtrage multi-conditions ?

Comment effectuer une jointure externe gauche LINQ to SQL avec un filtrage multi-conditions ?

DDD
Libérer: 2025-01-04 08:48:34
original
857 Les gens l'ont consulté

How to Perform a LINQ to SQL Left Outer Join with Multi-Condition Filtering?

Jointure externe gauche LINQ to SQL avec filtrage multi-conditions

Dans LINQ to SQL, une jointure externe gauche permet la récupération de tous enregistrements de la table de gauche, même s'il n'y a aucun enregistrement correspondant dans la table de droite. Lors d'une requête utilisant une jointure externe gauche, il peut s'avérer nécessaire d'appliquer des conditions de filtrage supplémentaires à la table jointe.

Considérez l'instruction SQL suivante :

SELECT f.value
FROM period AS p
LEFT OUTER JOIN facts AS f
ON p.id = f.periodid AND f.otherid = 17
WHERE p.companyid = 100
Copier après la connexion

Cette requête récupère la valeur du table "faits" pour chaque enregistrement de la table "période", même s'il n'y a aucun enregistrement correspondant dans la table "faits". De plus, il applique un filtre supplémentaire pour inclure uniquement les enregistrements pour lesquels la colonne "otherid" dans la table "facts" est égale à 17.

Pour traduire cette requête en LINQ, les étapes suivantes peuvent être suivies :

var query = from p in context.Periods
            join f in context.Facts
            on p.id equals f.periodid
            into fg
            from fgi in fg.Where(f => f.otherid == 17).DefaultIfEmpty()
            where p.companyid == 100
            select f.value;
Copier après la connexion

La principale différence avec une jointure externe gauche standard réside dans l'utilisation de la méthode Where() sur la table jointe "fg" avant d'appeler DefaultIfEmpty(). Cela garantit que la condition de filtrage supplémentaire est appliquée avant d'exclure potentiellement tout enregistrement en raison d'un résultat de jointure vide.

Une approche alternative implique l'utilisation d'une sous-requête :

var query = from p in context.Periods
            join f in context.Facts
            on p.id equals f.periodid
            into fg
            from fgi in (from f in fg
                         where f.otherid == 17
                         select f).DefaultIfEmpty()
            where p.companyid == 100
            select f.value;
Copier après la connexion

Ces deux approches atteignent l'objectif résultat souhaité de l’exécution d’une jointure externe gauche avec plusieurs conditions de jointure. Il est important de comprendre que placer la condition de filtrage supplémentaire dans la clause WHERE après JOIN peut ne pas produire le comportement souhaité, car cela pourrait entraîner l'exclusion d'enregistrements qui devraient être inclus en raison de la jointure externe gauche.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal