2013-03-12 112 views
0

我有這張名爲Projects的表。LINQ group by maxcount

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.Weekday部分計數的最大.. 到目前爲止,我已經嘗試了這樣的事情。

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

但是這會給我p1上的「週三」,因爲它高於「星期二」。我真正想要的是「星期二」,因爲它有更多的記錄「星期三」

回答

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) _ 
}) 
+0

工程就像一個魅力! :) 謝謝 – noisyass2 2013-03-13 01:23:09