2016-10-21 2 views
0

Tabella_Pratiche Einheiten meiner db ist, P_ListLettore eine Liste von Objekt ist. Wenn ich versuche und kommen Tabella_PraticheP_ListLettore I erzeugt Ausnahme.SQL Linq Joins Liste VB .NET

Dim listPraticheEsistenti As List(Of Tabella_Pratiche) 

listPraticheEsistenti = (From c In DB.Tabella_Pratiche Join b In P_ListLettore On c.posizione Equals b.AssignamentID And    c.data_affido.ToString("dd/MM/yyyy") Equals b.R_RecordPA.Data_inizio_affidamento.ToString("dd/MM/yyyy") Where c.tipo_mandato = "SPG" Select c).ToList 

Ausnahme „eine nicht behandelte Ausnahme des Typs 'System.NotSupportedException' in EntityFramework.SqlServer.dll

Zusätzliche Informationen: Nicht imstande, einen konstanten Wert vom Typ 'ImportPratiche.RecordPrSPG' zu erstellen In. in diesem Zusammenhang werden nur unterstützt, primitive Typen oder Aufzählung. „

+1

In Zukunft bitte Inglese Ausnahmemeldungen liefern. Alternativ gibt es eine [Spanisch SO] (http://es.stackoverflow.com/), als auch, wenn Sie in Spanischen kommunizieren bevorzugen (Ich weiß, das ist italienisch, aber diese sind die einzigen OS I knowof). Der Fehler ist, weil Sie nicht die Join-Syntax zwischen einem in Speicherliste und eine Liste verwenden können, die (noch auf der Datenbank) unter Verwendung von LINQ to SQL zugegriffen werden würde. Wenn Sie möchten, eine enge Äquivalent könnten Sie 'Contains' verwenden, die unterstützt wird, und wird auf der Datenbank in a' IN' Klausel übersetzt werden, aber dies unterstützt nur Listen von einfachen Typen wie eine Liste von' 'int' oder STRING'. – Igor

+0

Können Sie mir ein Beispiel geben? – ruosco82

+0

Auch kippe Sie ToString („“) verwenden, .net Das ist ein Konzept und nicht an SQL übersetzen. Es könnte sein, dass ist das, was das Problem ist. Ich lese nicht Italienisch so ich vermute auch hier könnte es andere Probleme, in Ihrem Code. – Igor

Antwort

1

Wie @Igor in seinem Kommentar schrieb, können Sie ein in-me nicht beitreten Mory Liste von Objekten mit einer Ergebnisdatenbank.
Dies ist zwei Entity Framework versucht, in die LINQ to SQL-Anweisung zu konvertieren und P_ListLettore ist in Ihrer Datenbank so unbekannt, die Entity Framework unbekannt.

Was Sie tun können, ist, Daten von den ersten zu laden und „Join“ In-Memory-Datenbank danach (der folgende Code völlig ungetestet):

'IEnumerable with AssignamentIDs' 
    Dim assignmentIDs = From p In P_ListLettore 
         Select p.AssignamentID 

    'Load Tabella_Pratiche with matching IDs from DB and convert into in-memory List' 
    Dim tmpPratiche = (From c In DB.Tabella_Pratiche 
         Where c.tipo_mandato = "SPG" And assignmentIDs.Contains(c.posizione) 
         Select c).ToList() 

    ' Perform Join on both in-memory lists with ID and Date' 
    Dim listPraticheEsistenti = (From c In tmpPratiche 
           Join b In P_ListLettore On c.posizione Equals b.AssignamentID 
             And c.data_affido Equals b.R_RecordPA.Data_inizio_affidamento 
            Select c).ToList 

bewusst sein, dass Sie nur einen kleinen September nutzen können .NET Linq2Sql von Funktionen in einer Abfrage, Date.ToString(format) wird beispielsweise nicht arbeiten.

+0

Es ist ein Fehler Problem nicht den Wert des Typs konvertieren kann ‚ (Linie 130)‘ in ‚ ruosco82

+0

Ich würde nicht P_LISTALETTORE laden will in Datenbank – ruosco82

+0

Sie müssen nicht P_LISTALETTORE laden. Sie haben alle 'Tabella_Pratiche', Schleife over' P_LISTALETTORE' zu laden und überprüfen, ob' 'posizione' und data_affido' sind equals auf' 'AssignamentID' und Data_inizio_affidamento'. Dies wird langsamer sein, aber sollte funktionieren. wird meine Antwort auf Montag bearbeiten Als ich wieder im Büro bin –