Maison > base de données > tutoriel mysql > Comment traduire les sous-requêtes IN de SQL en LINQ to SQL ?

Comment traduire les sous-requêtes IN de SQL en LINQ to SQL ?

Linda Hamilton
Libérer: 2024-12-28 18:39:14
original
487 Les gens l'ont consulté

How to Translate SQL's IN Subqueries into LINQ to SQL?

Gestion des sous-requêtes IN avec LINQ to SQL

Dans LINQ to SQL, vous pouvez rencontrer le besoin de gérer des sous-requêtes IN, une opération courante dans SQL. Considérons un scénario :

Question :

Comment pouvons-nous traduire la requête SQL suivante en LINQ to SQL ?

SELECT f.*
FROM Foo f
WHERE f.FooId IN (
    SELECT fb.FooId
    FROM FooBar fb
    WHERE fb.BarId = 1000
)
Copier après la connexion

Réponse :

Pour implémenter une telle requête dans LINQ to SQL, nous devons utiliser deux notions :

1. Sous-requête en tant que collection de clés :

Nous commençons par définir la sous-requête comme une collection de clés qui satisfont à la condition de la clause IN.

var fooBarIds = from fb in context.FooBar
                where fb.BarId == 1000
                select fb.FooId;
Copier après la connexion

2. Requête avec la méthode Contains :

Ensuite, nous pouvons utiliser la méthode Contains sur la collection de clés pour vérifier si un FooId donné est présent.

var result = from f in context.Foo
             where fooBarIds.Contains(f.FooId)
             select f;
Copier après la connexion

Cette requête renverra tous lignes de la table Foo où le FooId existe dans la collection de FooIds récupérés du sous-requête.

Cas d'utilisation étendus :

Les mêmes principes peuvent être appliqués pour implémenter d'autres opérations de sous-requête, telles que EXISTS :

// EXISTS
var q = from t1 in table1
        let t2s = from t2 in table2
                  where <Conditions for table2>
                  select t2.KeyField
        where t2s.Any(t1.KeyField)
        select t1;
Copier après la connexion

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!

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