如何将时间条目合并为每周报告的一行?

时间:2018-06-27 15:39:13

标签: asp.net vb.net linq

我正在为票务系统制作时间报告。在子表上跟踪每个员工的每个票务时间。

原始表格数据

Raw Table Data

我该如何退回一个星期的时间,这样,如果您多次处理票证,则不会返回多条记录?凭票分组吗?我无法将所有的行合并到一条记录中。

    Dim Today As DateTime = DateTime.Today
    Dim startOfWeek As DateTime = Today.AddDays(-1 * Today.DayOfWeek)
    Dim endOfWeek As DateTime = startOfWeek.AddDays(7)

    Dim RepeaterMyTimeDataThisWeek = (From t In db.Ticket_Times
                                      Where t.EmployeeID= EmployeeID AndAlso t.Date >= startOfWeek AndAlso t.Date < endOfWeek).ToArray()

Current repeater display

缺少用于分组和组织数据的代码。

    Dim results = RepeaterMyTimeDataThisWeek.GroupBy(Function(z) z.TicketID).[Select](Function(s) New With {
        .Ticket = s.First().Ticket,
        .Monday = s.Where(Function(c) c.Date.DayOfWeek = DayOfWeek.Monday).Sum(Function(c) c.Hours),
        .Tuesday = s.Where(Function(c) c.Date.DayOfWeek = DayOfWeek.Tuesday).Sum(Function(c) c.Hours),
        .Wednesday = s.Where(Function(c) c.Date.DayOfWeek = DayOfWeek.Wednesday).Sum(Function(c) c.Hours),
        .Thursday = s.Where(Function(c) c.Date.DayOfWeek = DayOfWeek.Thursday).Sum(Function(c) c.Hours),
        .Friday = s.Where(Function(c) c.Date.DayOfWeek = DayOfWeek.Friday).Sum(Function(c) c.Hours),
        .Saturday = s.Where(Function(c) c.Date.DayOfWeek = DayOfWeek.Saturday).Sum(Function(c) c.Hours),
        .Sunday = s.Where(Function(c) c.Date.DayOfWeek = DayOfWeek.Sunday).Sum(Function(c) c.Hours)
    })

1 个答案:

答案 0 :(得分:1)

尝试使用后跟Sum的GroupBy。 C#中的一个示例。

var x = new List<TicketTimes> {
    new TicketTimes{Ticket = "1284", Monday=1, Tuesday=0},
    new TicketTimes{Ticket = "1284", Monday=0.5f, Tuesday=1},
    new TicketTimes{Ticket = "251", Monday=1, Tuesday=0},
    new TicketTimes{Ticket = "6", Monday=1, Tuesday=0},

};

var results = x.GroupBy(z => z.Ticket)
 .Select(s => new TicketTimes {
    Ticket = s.First().Ticket,
    Monday = s.Sum(c => c.Monday),
    Tuesday = s.Sum(c => c.Tuesday),
 });


class TicketTimes
{
    public string Ticket {get; set;}
    public float Monday {get; set;}
    public float Tuesday {get; set;}
}

另请参阅:Linq: GroupBy, Sum and Count