Maison >base de données >tutoriel mysql >Comment effectuer une jointure externe gauche avec plusieurs conditions de jointure dans LINQ to SQL ?
LINQ to SQL : effectuer une jointure externe gauche en utilisant plusieurs conditions de jointure
LINQ to SQL vous permet d'effectuer une jointure externe gauche en utilisant plusieurs conditions de jointure pour récupérer les données de plusieurs tables, y compris les lignes de la table de gauche même s'il n'y a pas de lignes correspondantes dans la table de droite.
Pour implémenter une jointure externe gauche avec plusieurs conditions de jointure, vous devez d'abord établir la condition de jointure principale, qui est généralement la relation entre les clés primaires de la table. Une fois que vous avez votre jointure principale, vous pouvez ajouter des conditions de jointure supplémentaires pour filtrer davantage les résultats.
Exemple de requête SQL que vous avez fourni :
<code class="language-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</code>
Filtrez les lignes de la table « période » en fonction de « companyid » et récupérez la « valeur » correspondante de la table « faits » en fonction des conditions de jointure « id » et « otherid ».
Pour convertir cette requête en LINQ, vous devez utiliser la méthode Join()
et la méthode DefaultIfEmpty()
pour gérer les jointures externes. L'implémentation correcte de LINQ pour une requête SQL donnée est :
<code class="language-csharp">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</code>La clause
Where()
est utilisée pour appliquer des conditions de jointure supplémentaires à otherid
. La méthode DefaultIfEmpty()
garantit que les lignes du tableau de gauche sont incluses même s'il n'y a aucune ligne correspondante dans le tableau de droite.
Vous pouvez également utiliser une sous-requête :
<code class="language-csharp">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</code>
Les deux méthodes produisent les mêmes résultats que la requête SQL fournie. En suivant ces étapes, vous pouvez effectuer efficacement une jointure externe gauche à l'aide de plusieurs conditions de jointure dans LINQ to SQL.
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!