在c#中翻译Linq表达式

时间:2016-07-06 13:46:52

标签: c# entity-framework 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)它试图从Total_DownTime获取db.MU_Reports,但它需要来自db.Downtime_Reports。我是c#的新手,我这样做是为了更好地理解我创建的程序。

1 个答案:

答案 0 :(得分: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();