实体框架 - 在 C# 中翻译 Linq 表达式

本文关键字:翻译 Linq 表达式 框架 实体 | 更新日期: 2023-09-27 17:55:44

我正在尝试转换此代码:

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# 的新手,这样做是为了更好地理解我创建的程序。

实体框架 - 在 C# 中翻译 Linq 表达式

你对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();