Maison > développement back-end > C++ > Comment implémenter une jointure externe gauche avec plusieurs conditions dans LINQ to SQL ?

Comment implémenter une jointure externe gauche avec plusieurs conditions dans LINQ to SQL ?

DDD
Libérer: 2024-12-31 01:05:09
original
345 Les gens l'ont consulté

How to Implement a Left Outer Join with Multiple Conditions in LINQ to SQL?

Implémentation d'une jointure externe gauche avec plusieurs conditions de jointure dans LINQ to SQL

Dans les situations où l'accès aux données implique la jointure de plusieurs tables avec des conditions spécifiées, LINQ to SQL fournit un moyen efficace pour effectuer de telles opérations. Cet article se penche sur un scénario spécifique dans lequel une jointure externe gauche avec plusieurs conditions de jointure est requise pour récupérer des données.

Requête initiale et défi

Considérez la requête 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

La tâche est de traduire cette requête en une expression LINQ. Bien qu'il existe des méthodes standard pour effectuer des jointures externes gauches dans LINQ (par exemple, en utilisant DefaultIfEmpty()), l'incorporation de la condition de jointure supplémentaire f.otherid = 17 présente un défi.

Solution : placer la condition de jointure Avant DefaultIfEmpty()

La clé pour relever ce défi est d'introduire la condition de jointure avant d'invoquer DefaultIfEmpty(). Ceci peut être réalisé en utilisant soit la syntaxe de la méthode d'extension, soit une sous-requête :

// Using extension method syntax
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;

// Using a subquery
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

Explication du placement de la condition de jointure

La condition AND f.otherid = 17 fait partie de la jointure car elle garantit que seules les lignes de la table de faits qui remplissent cette condition sont jointes aux lignes correspondantes de la table de périodes. Placer cette condition dans la clause WHERE après la jointure exclurait toutes les lignes de la table de périodes qui n'ont pas de ligne correspondante dans la table de faits, même si ces lignes satisferaient autrement à la condition. En précisant la condition dans la jointure, on préserve le comportement souhaité.

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