Sonntag, Dezember 15, 2019

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

InformationsquelleAutor manav inder | 2011-09-08

6 Kommentare

  1. 9

    Was ist, wenn Sie umkehren Ihr beitreten und ein wenig where dort?

    var result = from department in departments
                 where department.EmployeeID != null
                 join employee in employees
                 on department.EmployeeID.Value equals employee.EmployeeID
                 select new { employee, department };
    • Wie konnte es auch annehmen, um Arbeit, noch emp.EmployeeID ist eine null-Bereich und Abt.EmployeeID-Feld null-Werte zulässt, habe ich sogar überprüfen Sie Ihren code, aber kein Glück, immer Noch die gleiche Fehlermeldung. Wir können nicht an nullable int int
    • Sie ändern müssen, Abt.EmployeeID in Abt.EmployeeID.Wert
    • Konstantin, gleiche Fehler keinen Unterschied
    • So ist dein code unterscheidet sich von den hier ideone.com/4F8X2? Ich denke, es sein sollte, da Sie immer Fehler immer noch.
    • Aus dem link, den Sie gegeben haben, ich bin so so sehr überfordert, ich habe keine Worte, um DANKE zu sagen, Sie sind einfach hervorragend, Es war ein Unterschied zwischen diesem code und dem einen geschrieben habe in dem link, Trotzdem DANKE
    • Ich habe das ausgearbeitete meine Antwort (da Sie bereits geprüft, ob eine Lösung), um Ihren code.
    • Dies ist nur ein Tipp: warum Sie verwendet „auf neu“ und „gleich neu“, für einen single-comparer, brauchen Sie nicht, um mit der Anweisung „new“, nur „an“ und „gleich“, on department.EmployeeID.Value equals employee.EmployeeID
    • Ich habe das gleiche Problem mit mehreren Bedingungen. Bitte unterstützen Sie, wie zu tun, dass..

  2. 8

    Vergleichen Int? und Int append .Value auf die nullable-Eigenschaft:

    var result = from emp in employees
                 join dept in departments
                 on new { Source = emp.EmployeeID }
                 equals new { Source = dept.EmployeeID.Value };
  3. 1

    Überprüfen Sie den Typ auf emp.EmployeeID und dept.EmployeeID. Fehlen Ihnen vielleicht ein cast, wenn Sie anders sind.

    etwas wie:

    on new { Source = emp.EmployeeID }
    equals new { Source = **(int)**dept.EmployeeID };

    Sieht aus wie emp.EmployeeID ist der Typ int und dept.EmployeeID ist der Typ nullable<int>.

  4. 1

    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.

    var chargeCodes = from s in db.Charge_Codes
    where s.CompanyID != null
    select new { CompanyID = (int)s.CompanyID, 
                 Charge_CodeID = s.Charge_CodeID, 
                 Revenue_Code_Id = (int)s.Revenue_CodeID, };
    
    
    
    //now my chargeCodes contains an anonymous with a non nullable CompanyID and 
    //a non nullable Revenue_CodeID 
    
    //use chargeCodes here
    var query = from oi in db.Order_Items
    join cc in chargeCodes on 
    new {oi.CompanyID, oi.Charge_CodeID} equals new {cc.CompanyID, cc.Charge_CodeID}
    • Danke!!! Ich hatte ein ähnliches problem, wo das id-Feld war ein varchar in der Tabelle und die Nummer in der anderen. Umstellung auf anomale geben Sie es behoben.
  5. 1

    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.

  6. 0

    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.

    var query = from y in Context.Table1
            join y in Context.Table2 on new { Field1 = x.Field1.Value, Field2 = x.Field2 }
            equals new { Field1 = y.Field1DiffName, Field2 = y.Field2 }

    Ich hoffe, es hilft wer steht vor dieser Frage.

Kostenlose Online-Tests

Letzte Fragen

Tun ItemView löst Blase?

Ich habe eine CompositeView für eine Tabelle. Ich habe Trigger-set in der Kind-ItemView für jede Zeile... var TableRow = Marionette.ItemView.extend({ tagName:...

Wie kann ich untersuchen, WCF was 400 bad request über GET?

Die folgenden WCF-endpoint funktioniert gut mit dem WCF test client: AssetList ListFlaggedAssets(short processCode, string platform, string endpoint = "null", string portalId = "null", int...

Bei der Verwendung von UUIDs, sollte ich auch mit AUTO_INCREMENT?

Wir bauen eine neue web-app, die eine offline-iPad - /Android-app-version auf einer Reihe von lokalen Geräten, die Einsätze mit neuen Daten. Als solche benötigen...

Actionscript-Objekt, das verschiedene Eigenschaften

Wie kann ich die Anzahl der Eigenschaften in einer generischen Actionscript-Objekt? (Wie die Array-Länge) InformationsquelleAutor Fragsworth | 2011-01-15

Wie plot mehrere Graphen und nutzen Sie die Navigations-Taste im [matplotlib]

Die neueste version von matplotlib erstellt automatisch Navigations-buttons unter den graph. Aber die Beispiele, die ich finden alles im Internet zeigen, wie erstellen Sie...