LINQ group by maxcount

时间:2013-03-12 03:11:27

标签: vb.net linq

我有一个名为Projects的表。

Name            Date           Hours
p1                  1/1/13         1
p1                  1/8/13         2
p1                  1/9/13         1
p2                  1/3/13         5
p2                  1/4/13         3

我想把这些聚合成像这样的东西

p1    Tue    4
p2    Thu    8

我不知道如何获得Date of Date的最大值。周末部分.. 到目前为止,我尝试过这样的事情。

Dim qry = From er in Projects 
          Group er by er.Name Into Max(er.Date.Value.Weekday), Sum(er.Hours)

但这会让我在p1上获得“Wed”,因为它高于“Tue”。我真正想要的是“星期二”,因为它有更多的记录“Wed”

1 个答案:

答案 0 :(得分:2)

查找条目最多的日期的技巧是按天分组,然后按照每个组中的条目数对组进行排序,然后抓住第一个。

Dim query = Projects.GroupBy(Function(e) e.Name, Function(name, groupedEntries) New With { _
    .Name = name, _
    .TopDay = groupedEntries.GroupBy(Function(e) e.[Date].DayOfWeek).OrderByDescending(Function(g) g.Count()).First().Key, _
    .TotalHours = groupedEntries.Sum(Function(e) e.Hours) _
})