2016-07-06 85 views
2

我試圖把這段代碼轉換:在C#翻譯LINQ表達式

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) 
      }; 

要看起來像這樣之一:

var query = db.MU_Reports.Join(db.Downtime_Reports, b=> b.Shift, c=> c.Shift, (b , c) => new { b, thisshift = c }) 
      .Where(n => n.thisshift.Down_TIme_Codes.Equals("9185")) 
      .GroupBy(d=> new { d.b.Date, d.b.Shift, d.b.Machine_Number, d.b.MU }, d => d.b) 
      .Select (g=> new 
      { 
       Date = g.Key.Date, 
       Shift = g.Key.Shift, 
       Machine = g.Key.Machine_Number, 
       MU = g.Key.MU, 
       No_Work_Hours = g.Sum(i => i.Total_DownTime) 
      }).ToList(); 

正如你看到的我是非常密切的。我唯一的問題是最後的聲明No_Work_Hours = g.Sum(i => i.Total_DownTime)它試圖從db.MU_Reports得到Total_DownTime,但它需要來自db.Downtime_Reports。我是c#的新手,並且正在做這個來理解我創建的程序更好。

+1

應該不是你爲'第二個參數GroupBy'被字符'D => d.thisshift'代替字符'D => db' ? – juharr

+0

@juharr否,因爲'MU'只存在於'd.b.MU'而不是'd.thisshift.MU'中 – JCM

+0

仔細閱讀@juharr評論並重試。 –

回答

2

您對GroupBy的第二個參數應該是d => d.thisshift而不是d => d.b。對應於group downtime by,但這麼做d => d.b這就像你正在做group b by

var query = db.MU_Reports 
    .Join(
     db.Downtime_Reports, 
     b=> b.Shift, 
     c=> c.Shift, 
     (b , c) => new { b, thisshift = c }) 
    .Where(n => n.thisshift.Down_TIme_Codes.Equals("9185")) 
    .GroupBy(
     d=> new { d.b.Date, d.b.Shift, d.b.Machine_Number, d.b.MU }, 
     d => d.thisshift) 
    .Select (g=> new 
    { 
     Date = g.Key.Date, 
     Shift = g.Key.Shift, 
     Machine = g.Key.Machine_Number, 
     MU = g.Key.MU, 
     No_Work_Hours = g.Sum(i => i.Total_DownTime) 
    }) 
    .ToList(); 
+0

從我的理解你告訴我這樣做'.GroupBy(d => new {d.thisshift.Date,d.thisshift.Shift,d.thisshift.Machine_Number},d => db)'但是我仍然有同樣的問題,但現在我沒有'MU' – JCM

+0

'MU'是您爲您的第一個lambda創建的'Key'創建的匿名類的一部分。改變第二個應該對該部分沒有影響。 – juharr

+0

@JCM不,只更改第二個參數。 – juharr