2016-07-05 29 views
-1

Ich habe diesen Code und es wird angenommen, Coming up die entsprechenden Tabellen zu füllen, und es wird die erste Tabelle (Mu_Reports) ein, aber die zweite Tabelle (MU_By_Machine) kommt immer wieder nach oben blank-Code leer jedes Mal

using (var db = new ProductionContext()) 
     { 
      var objct = ((System.Data.Entity.Infrastructure.IObjectContextAdapter)db).ObjectContext; 
      objct.ExecuteStoreCommand("TRUNCATE TABLE [MU Report]"); 
      objct.ExecuteStoreCommand("TRUNCATE TABLE [MU By Machine]"); 
      db.SaveChanges(); 

      var query = db.Production_Reports 
       .GroupBy(x => new { x.Date, x.Machine_Number, x.Shift }) 
       .Select(x => new 
       { 
        Date = x.Key.Date, 
        Shift = x.Key.Shift, 
        MachineNum = x.Key.Machine_Number, 
        MU = x.Sum(i => i.Partial_MU_ * 100) 
       }).ToList(); 

      foreach (var item in query) 
      { 
       var z = new MU_Report(); 

       z.Date = System.Convert.ToDateTime(item.Date); 
       z.Shift = item.Shift; 
       z.Machine_Number = item.MachineNum; 
       z.MU = item.MU; 

       db.MU_Reports.Add(z); 
       db.SaveChanges(); 
      } 

      var query2 = from b in db.MU_Reports 
         join downtime in db.Downtime_Reports on b.Shift equals downtime.Shift 
         where downtime.Downtime_Code.Equals("9185") 
         group downtime by new { b.Date, b.Shift, b.Machine_Number, b.MU } into g 
         select new 
         { 
          Date = g.Key.Date, 
          Shift = g.Key.Shift, 
          Machine = g.Key.Machine_Number, 
          MU = g.Key.MU, 
          No_Work_Hours = g.Sum(x => x.Total_DownTime) 
         }; 
      foreach (var item in query2) 
      { 
       var y = new MU_By_Machine(); 

       y.Date = item.Date; 
       y.Shift = item.Shift; 
       y.Machine_Number = item.Machine; 
       y.MU = item.MU; 
       y.MU_w_o_No_Work = (item.MU * 8)/(8 - item.No_Work_Hours); 

       db.MU_By_Machines.Add(y); 
       db.SaveChanges(); 
      } 
     } 
Füllung

Ich weiß nicht, ob es ist, weil ich nicht query und query2 in der gleichen Taste gehen kann oder wenn ich nur etwas falsch mache. Kein Fehler tritt auf erscheint leer. Bitte beachte, dass ich neu in C# bin.

+0

Ich habe dies getan, indem ich die 2 Abfragen in separate Methoden zerlegt und sie dann beim Drücken der Taste aufgerufen habe. Dann bin ich in der Lage, einen Debug-Punkt zu verwenden, um zu sehen, ob Sie Daten zurück zur foreach-Anweisung in query2 bekommen oder ob Sie woanders kaputt sind. – tCoe

Antwort

2

Sie müssen .ToList() am Ende Ihrer Select-Anweisung auch in query2 aufrufen.

+0

Ich denke, es ist [möglich] (http://stackoverflow.com/q/3688213/188246), Daten von einem 'IQueryable' in einer' foreach' zurückzugeben, ohne 'ToList()' aufzurufen. Der Fehler ist wahrscheinlich woanders. –

+0

auch ohne die ToList() sollte etwas in die foreach-Schleife zurückgegeben werden, aber höchstwahrscheinlich nur das letzte Element in der Abfrage. – tCoe

+0

Wie füge ich die '.ToList()' auf diesem ein? Muss ich es übersetzen, wenn ich es versucht habe und kläglich versagt habe, das zu tun? – JCM

Verwandte Themen