Linq2SQL Fehler "Lokale Sequenz kann nicht in LINQ to SQL verwendet werden"

8

Ich habe einen Code, der eine In-Memory-Liste mit einigen Daten in einer Datenbank kombiniert. Das funktioniert in meinen Komponententests ganz gut (mit einem verspotteten Linq2SqlRepository, das List verwendet).

%Vor%

Ich erhalte einen Fehler, den ich nicht wirklich verstehe, wenn ich ihn gegen eine Datenbank starte.

  

Ausnahmeinformationen:
  Ausnahmetyp: System.NotSupportedException
  Ausnahmebedingungsnachricht: Die lokale Sequenz kann in LINQ to SQL nicht verwendet werden   Implementierung von Abfrageoperatoren   außer dem Operator Contains ().

Was mache ich falsch?

Ich nehme an, es hängt damit zusammen, dass sich orderItems in der Datenbank befindet und releasedItems im Speicher ist.

BEARBEITEN

Ich habe meinen Code aufgrund der gegebenen Antworten geändert (Danke an alle)

%Vor%     
Antony Scott 28.06.2010, 13:59
quelle

3 Antworten

15
  

Ich vermute, es hat damit zu tun   Das orderItems befindet sich in der Datenbank   und releasedItems ist im Speicher.

Sie haben Recht, Sie können eine Tabelle nicht mit LINQ einer Liste hinzufügen.

Sehen Sie sich diesen Link an:

Ссылка

Er schlägt vor, die Contains () -Methode zu verwenden, aber Sie müssen damit herumspielen, um zu sehen, ob es für Ihre Bedürfnisse funktioniert.

    
Abe Miessler 28.06.2010, 14:03
quelle
2

Es sieht so aus, als müssten Sie zuerst die Datenbankabfrage formulieren, da sie nicht die korrekte SQL-Repräsentation der Ausdrucksbaumstruktur für Objekte im Speicher erstellen kann. Möglicherweise liegt es am Join, also ist es möglich, einen Wert aus der In-Memory-Abfrage zu erhalten, die als einfaches Primitiv verwendet werden kann? Zum Beispiel mit Contains() , wie der Fehler vermuten lässt.

    
Neil Barnwell 28.06.2010 14:06
quelle
2

Ihre Einheitentests funktionieren, weil Sie eine Speicherliste mit einer Speicherliste vergleichen.

Für die Speicherliste in der Datenbank müssen Sie entweder die Speichervariable.Kontakte (...) verwenden oder den DB-Aufruf zuerst ausführen und eine Liste () zurückgeben, damit Sie die Speicherliste wie zuvor mit der Speicherliste vergleichen können. Die zweite Option würde zu viele Daten zurückgeben, so dass Sie die Contains () Route erzwungen haben.

%Vor%     
Simon Hughes 28.06.2010 14:25
quelle

Tags und Links