Erreur LINQ to SQL : restriction d'utilisation des séquences locales
Dans LINQ to SQL, les opérateurs de requête ne peuvent pas utiliser de séquences locales, à l'exception de Contains() opérateur. Cette erreur se produit souvent lorsque vous tentez d'effectuer des jointures entre des sources SQL et des sources locales.
L'extrait de code fourni montre une jointure entre la table Shop.Sections et une collection locale, obj.SectionObjects. Cependant, cette opération n'est pas valide, ce qui entraîne l'erreur : "La séquence locale ne peut pas être utilisée dans l'implémentation LINQ to SQL des opérateurs de requête, à l'exception de l'opérateur Contains()."
Solution : récupération de données avant la jointure
Pour résoudre cette erreur, récupérez les données SQL en mémoire avant de tenter la jointure. Dans ce scénario, nous n'effectuons pas une véritable jointure mais plutôt une requête "select...where...selectid in". Ceci peut être réalisé en utilisant la méthode Contains() :
var SE = Shop.Sections .Where(s => obj.SectionObjects .Select(so => so.SectionId) .Contains(s.SectionId)) .ToList();
Cette requête se traduit par :
select * from Sections where sectionId in (...)
où la liste des ID dans la clause in est dérivée de la collection d'objets locale. . Cette approche garantit que toutes les données utilisées dans la requête font partie de la source SQL, résolvant ainsi l'erreur.
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!