Typ-Inferenz konnte in einem Aufruf von 'join' auf null-Werte zulässt und nicht-nullable int
In meiner Linq, bin ich versucht zu machen, eine innere Verknüpfung, eine null-Feld. Mitarbeiter und Abteilung haben eine Beziehung, die Abteilung kann eine PersonalNr oder vielleicht haben Sie eine null. So was würde mein beitreten, wenn ich will nur die Datensätze, die satisifed der inner-join (kein Ergebnis für null EmployeeIDs):
var result = from emp in employees
join dept in departments
on new { Source = emp.EmployeeID }
equals new { Source = dept.EmployeeID };
Bin ich immer eine Ausnahme:
Den Typ von einem der Ausdrücke in der join-Klausel ist falsch.
Typ-Inferenz konnte in einem Aufruf "join".
Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was ist, wenn Sie umkehren Ihr beitreten und ein wenig
where
dort?on department.EmployeeID.Value equals employee.EmployeeID
Vergleichen Int? und Int append
.Value
auf die nullable-Eigenschaft:Überprüfen Sie den Typ auf
emp.EmployeeID
unddept.EmployeeID
. Fehlen Ihnen vielleicht ein cast, wenn Sie anders sind.etwas wie:
Sieht aus wie
emp.EmployeeID
ist der Typint
unddept.EmployeeID
ist der Typnullable<int>
.Ich hatte das gleiche Problem, wo mein charge_codes.CompanyId war nullable aber meine order_items.CompanyId war KEINE null-Werte.
So musste ich meine Ladung-codes in Ihre eigene ananomous-Typ und machen es nicht null sein.
Gefunden eine nützliche Antwort aus einem anderen link bei https://social.msdn.microsoft.com/Forums/en-US/bf98ec7a-cb80-4901-8eb2-3aa6636a4fde/linq-join-error-the-type-of-one-of-the-expressions-in-the-join-clause-is-incorrect-type-inference?forum=linqprojectgeneral
Beitreten mehrwertige Schlüssel, die Sie brauchen, um den Bau einer anonymen typ auf beiden Seiten des 'gleich', das ist der gleiche Typ. Die anonyme typeninitialisierer Ausdruck leitet sowohl den Typ und Namen der Mitglieder aus dem Ausdruck, den Sie liefern. In deinem Fall die Namen der Mitglieder unterschiedlich sind, so dass die Arten sich unterscheiden, also C# kann nicht herausfinden, die häufigste Art zwischen den beiden.
auf neue { VC.Machen Sie, VC.Modell } gleich neue { MD.MakeID, MD.Referenz }
sollte
auf neue { VC.Machen, CV.Modell } gleich neue { Make = MD.MakeID, Modell = MD.Referenz }
Mit den Namen = value-syntax bei der Initialisierung können Sie den Namen, den der compiler verwendet, wenn die Schaffung der Art. Wenn alle Mitglieder, Typen & Namen sind die gleichen, dann ist die anonyme Typen sind vom gleichen Typ.
In meinem Fall hatte ich diesen Fehler auf einen join über mehrere Spalten. Die Namen der Eigenschaft unterschiedlich waren und einer von Ihnen war auch null-Werte zu. Alles, was ich Tat, war die Schaffung eines namens für die Eigenschaften und das hinzufügen der ".Wert" auf die nullable-Wert, so wird die LINQ-Beitreten könnte richtig zuordnen dieser Eigenschaften.
Ich hoffe, es hilft wer steht vor dieser Frage.