2016-07-06 83 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