Groupby和加入合作

时间:2016-06-30 14:06:27

标签: c# entity-framework

我正在使用两张桌子: MU_Report表

Date      | Shift | Machine | MU
1/12/2016 |   1   |   12    | 44%
1/12/2016 |   2   |   12    | 68%
1/12/2016 |   3   |   12    | 78%

停机时间_报告表

 Date      | Shift | Machine | DT reason|  DT_Hours
 1/12/2016 |   1   |   12    | No Work  |    3
 1/12/2016 |   2   |   12    | No Resin |    2
 1/12/2016 |   2   |   12    | No Op.   |    4
 1/12/2016 |   3   |   12    | No Work  |    1
 1/12/2016 |   3   |   12    | No Work  |    5

我想要做的是让MU_Reports表查看Down_Time表,以便从同一天,轮班和机器获得No Work DT原因,然后对其求和。 输出示例

 Date      | Shift | Machine | MU   |  No_Work_Hours
 1/12/2016 |   1   |   12    | 44%  |     3
 1/12/2016 |   2   |   12    | 68%  |     0 
 1/12/2016 |   3   |   12    | 78%  |     6

我在C#中使用实体框架我对这两个程序都是新手,所以请记住这一点。

编辑:我转换为加入,但现在我遇到了downtime.Downtime_Code.Equals("R09185")在上下文中不存在的问题

       var query = from b in db.MU_Reports
                   join downtime in db.Downtime_Reports on b.Shift equals downtime.Shift into o
                   where downtime.Downtime_Code.Equals("R09185")
                   select new
                   {
                       Date = b.Date,
                       Shift = b.Shift,
                       Machine = b.Machine,
                       MU = b.MU,
                       No_Work_Hours = o.Sum(x => x.Dt_Hours)
                   };

1 个答案:

答案 0 :(得分:0)

试试这个 -

var query = from b in db.MU_Reports
            join downtime in db.Downtime_Reports on b.Shift equals downtime.Shift
            where downtime.Downtime_Code.Equals("R09185")
            group downtime by new { b.Date, b.Shift, b.Machine, b.MU } into g
            select new
            {
                Date = g.Key.Date,
                Shift = g.Key.Shift,
                Machine = g.Key.Machine,
                MU = g.Key.MU,
                No_Work_Hours = g.Sum(x=>x.Dt_Hours)
            };