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.
Ich habe meinen Code aufgrund der gegebenen Antworten geändert (Danke an alle)
%Vor%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.
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.
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%Tags und Links linq linq-to-sql