Heim >Datenbank >MySQL-Tutorial >Warum löst LINQ to SQL beim Verknüpfen mit lokalen Sammlungen den Fehler „Lokale Sequenznutzungsbeschränkung' aus?
LINQ to SQL-Fehler: Einschränkung der Verwendung lokaler Sequenzen
In LINQ to SQL können Abfrageoperatoren keine lokalen Sequenzen verwenden, mit Ausnahme von Contains() Operator. Dieser Fehler tritt häufig auf, wenn versucht wird, Verknüpfungen zwischen SQL-Quellen und lokalen Quellen durchzuführen.
Das bereitgestellte Codefragment zeigt eine Verknüpfung zwischen der Shop.Sections-Tabelle und einer lokalen Sammlung, obj.SectionObjects. Dieser Vorgang ist jedoch ungültig, was zu folgendem Fehler führt: „Die lokale Sequenz kann in der LINQ to SQL-Implementierung von Abfrageoperatoren außer dem Operator „Contains()“ nicht verwendet werden.“
Lösung: Datenabruf vor dem Join
Um diesen Fehler zu beheben, rufen Sie die SQL-Daten in den Speicher ab, bevor Sie den Join versuchen. In diesem Szenario führen wir keinen echten Join durch, sondern eine „select...where...selectid in“-Abfrage. Dies kann mit der Methode „Contains()“ erreicht werden:
var SE = Shop.Sections .Where(s => obj.SectionObjects .Select(so => so.SectionId) .Contains(s.SectionId)) .ToList();
Diese Abfrage wird wie folgt übersetzt:
select * from Sections where sectionId in (...)
wobei die Liste der IDs in der In-Klausel aus der lokalen Objektsammlung abgeleitet wird . Dieser Ansatz stellt sicher, dass alle in der Abfrage verwendeten Daten Teil der SQL-Quelle sind, wodurch der Fehler behoben wird.
Das obige ist der detaillierte Inhalt vonWarum löst LINQ to SQL beim Verknüpfen mit lokalen Sammlungen den Fehler „Lokale Sequenznutzungsbeschränkung' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!