Maison > développement back-end > C++ > Comment puis-je effectuer une jointure externe gauche avec plusieurs conditions de jointure dans LINQ to SQL ?

Comment puis-je effectuer une jointure externe gauche avec plusieurs conditions de jointure dans LINQ to SQL ?

Barbara Streisand
Libérer: 2024-12-29 20:02:15
original
529 Les gens l'ont consulté

How Can I Perform a Left Outer Join with Multiple Join Conditions in LINQ to SQL?

LINQ to SQL : amélioration des jointures externes gauches avec plusieurs conditions de jointure

Dans LINQ to SQL, les jointures externes gauches fournissent un mécanisme puissant pour combiner données provenant de plusieurs tables. Cependant, lorsqu'il s'agit de scénarios impliquant des conditions de jointure supplémentaires, il devient nécessaire d'explorer des techniques qui étendent l'approche standard.

Considérez la requête SQL :

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 cherche à récupérer des données de les tables 'period' et 'facts', en appliquant une jointure externe gauche sur les colonnes 'id' et 'periodid'. De plus, il inclut une autre condition de jointure, « f.otherid = 17 », pour filtrer les résultats.

Dans LINQ to SQL, l'implémentation typique d'une jointure externe gauche implique l'utilisation de la méthode « DefaultIfEmpty() » . Cependant, pour tenir compte de la condition de jointure supplémentaire, nous devons modifier notre approche.

La requête LINQ suivante obtient le résultat souhaité :

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

Ici, nous introduisons la condition de jointure supplémentaire dans le Clause '.Where()', garantissant que la sélection des lignes du groupe 'fg' est filtrée en fonction de 'f.otherid = 17'.

Alternativement, nous pourrions utiliser une sous-requête :

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

Les deux approches effectuent avec succès une jointure externe gauche tout en appliquant la condition de jointure supplémentaire, permettant une récupération plus ciblée des données.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal