2016-06-27 10 views
0

Ich habe 2 Tabellen, die ich Spalten basierend auf CID greifen muss, die ClientID in beiden Tabellen ist. Mein Code unten funktioniert bei der Anzeige der Tabelle, aber _DOCID ist immer Null. Was vermisse ich?Linq2Sql Join in DefaultIfEmpty

  public IQueryable ReturnCart(int cid) 
    { 
     try 
     { 
      var result = from c in veps.ecomCarts 
         join d in veps.lawFirmClientDocumentPurchaseds on c.ClientID equals d.ID into cd 
         from d in cd.DefaultIfEmpty() 
         where c.ClientID == cid 
          select new 
         { 
          _DOCID = d.ID, 
          _ID = c.ID, 
          _CID = c.ClientID, 
          _UPC = c.UPC, 
          _Description = c.Description, 
          _Quantity = c.Quantity, 
          _UnitPrice = c.UnitPrice, 
          _Discount = c.Discount, 
          _Total = c.Total, 
          _InProgress = c.InProgress, 
          _dts = c.dts 

         }; 


      return result; 
     } 
     catch (Exception ex) 
     { 
      _IsError = true; 
      _ErrorMsg = ex.Message; 
      return null; 
     } 
    } 

Aktualisiert Ausgabe Bild: enter image description here

+0

"* basierend auf CID, die ** ClientID ** in ** beiden ** Tabellen *" ist. Aber innerhalb der Abfrage verwenden Sie 'auf c.ClientID gleich d.ID'. So wie es sein sollte? –

+0

Sorry für den Tippfehler. Sollte lesen: Join d in veps.lawFirmClientDocumentPurchased auf c.ClientID gleich d.ClientID in cd – RooGuru

+0

Ok, und Sie sagen, der korrigierte linke Join gibt immer Null für die rechte Seite zurück? Dies passiert normalerweise, wenn es keinen passenden Datensatz aus der "richtigen" Tabelle gibt (das ist der ganze Grund des linken äußeren Joins). Sind Sie sicher, dass Sie Daten in 'lawFirmClientDocumentPurchaseds' mit' ClientID' haben, die der übergebenen 'cid' entsprechen? –

Antwort

0

So nach viel in meinem Schlaf zu denken erkannte ich, dass die Antwort auf meine Frage war GroupBy Nested. Hier ist mein endgültiger Code.

public IQueryable ReturnCart(int cid) 
    { 
     try 
     { 
      var result = (from c in veps.ecomCarts 
          where c.ClientID == cid 
          select new 
          { 

           _ID = c.ID, 
           _CID = c.ClientID, 
           _UPC = c.UPC, 
           _Description = c.Description, 
           _Quantity = c.Quantity, 
           _UnitPrice = c.UnitPrice, 
           _Discount = c.Discount, 
           _Total = c.Total, 
           _InProgress = c.InProgress, 
           _dts = c.dts, 

           lcdp = from d in veps.lawFirmClientDocumentPurchaseds 
            select new 
            { 
             _DOCID = d.ID 
            } 
          }); 

      return result; 
     } 
     catch (Exception ex) 
     { 
      _IsError = true; 
      _ErrorMsg = ex.Message; 
      return null; 
     } 
    } 

Vielen Dank Ivan für die Veröffentlichung. Du hast mir tatsächlich geholfen, darüber nachzudenken, was zu tun ist. Also danke dafür.