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 )
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;
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;
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;
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!