Problem mit LINQ Syntax bei logischen Verknüpfungen im Join

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Problem mit LINQ Syntax bei logischen Verknüpfungen im Join

    Hallo,

    Ich versuche zwei Tabellen auf folgende Art zu Joinen: Alle Datensätze bei denen Spalte2 übereinstimmt aber nicht alle gelichzeitig von (Spalte3, Spalte4 und Spalte5)

    Folgendes hätte ich gedacht wäre die Syntax:

    VB.NET-Quellcode

    1. Dim query = From a In Table1 Join b in Table2 On a.spalte2 Equals b.spalte2 And Not (a.spalte3 Equals b.spalte3 And a.spalte4 Equals b.spalte4 And a.spalte5 Equals b.spalte5)


    Allerdings sagt er die Klammern sind überflüssig, das sind sie aber definitiv nicht. Ist die Frage ob man überhaupt Not auf mehrere Wahrheitswerte anwenden kann.


    Viele Grüße
    AndAlso möchte er garnicht haben sonst hätte ich es ja verwendet


    Ich denke so treffe ich dieselbe Ergebnismenge:

    VB.NET-Quellcode

    1. Dim query = From a In Table1 Join b in Table2 On a.spalte2 Equals b.spalte2 Where a.spalte3 <> b.spalte3 OrElse a.spalte4 <> b.spalte4 OrElse a.spalte5 <> b.spalte5

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    glaub nicht, aber kann sein - nur: wie willst du es testen?

    Wiedemauchsei - Mein Vorschlag weiterentwickelt sähe so aus:

    VB.NET-Quellcode

    1. Dim query = From a In Table1 Join b In Table2 On (a.spalte2 Equals b.spalte2) AndAlso Not ((a.spalte3 Equals b.spalte3) OrElse (a.spalte4 Equals b.spalte4) OrElse (a.spalte5 Equals b.spalte5))
    Also dasser Andalso nicht will deutet drauf hin, dass der Operator-Vorrang von Equals niedriger ist als der von AndAlso - daher die Klammern.
    Also ich bin sicher bei dir funktioniert es so, aber irgendwie bei mir nicht. AndAlso will er weiterhin mit And ersetzen und die Klammer seien üflüssig

    Testen kann ich es nur indem ich zwei Beispieltabellen in ne Datenbank jage und mit MSSQL vergleiche^^

    Wer weiß was mit meinem Studio ist, vielleicht ist das versionabhängig? Oder ich hab was kaputt gemacht

    Haudruferzappeltnoch schrieb:

    Also ich bin sicher bei dir funktioniert es so
    Da bin ich nicht so sicher.
    Ich hab ja deine Datenlage nicht, ich hab mir nur was aus den Fingern gesogen, anhand deiner Vorlage

    Evtl. zu beachten auch, was Table1 ist. Wenn das eine EF-Entity ist, dann bist du in Linq2Sql unterwegs, und nicht in Linq2Objects.
    Linq2Sql tickt bisserl anders, hat v.a. einen geringeren Leistungsumfang als Linq2Objects.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()