使用TimeSpan.Hours在Linq中进行分组

Raj*_*mar 0 c# linq datatable winforms

我有一个数据表,其中包含以下列

CallTime   CallType

15:45:00    Voice
15:30:54    Voice
00:12:14    SMS
01:13:47    Voice
05:48:23    SMS
12:00:47    Voice
Run Code Online (Sandbox Code Playgroud)

现在我想要使用像这样的Linq结果

Hrs   Count
00    1
01    1
02    0
03    0
04    0
05    1
06    0
|
|
|
12    1
13    0
|
15    2
16    0
|
|
23    0
Run Code Online (Sandbox Code Playgroud)

我正在使用以下查询,它给我的数值> 0但我想得到那些也有count = 0

var groupQueryTimeTotal = (from r in Foundrows.AsEnumerable()
                                   let time = TimeSpan.Parse(r.Field<string>("Call Time"))
                                   group r by time.Hours
                                       into g
                                       select new
                                       {
                                           CallTime = g.Key,
                                           CallCount = g.Count(),
                                       }).OrderBy(s => s.CallTime);
Run Code Online (Sandbox Code Playgroud)

这个查询给我的结果就像

Hrs   Count
00    1
01    1
05    1
12    1
15    2
Run Code Online (Sandbox Code Playgroud)

dtb*_*dtb 5

执行第一个集合和第二个集合所在的分组连接.Enumerable.Range(0, 24)Foundrows.AsEnumerable()

例:

var input = new List<TimeSpan>
{
    new TimeSpan(15, 45, 00),
    new TimeSpan(15, 30, 54),
    new TimeSpan(00, 12, 14),
    new TimeSpan(01, 13, 47),
    new TimeSpan(05, 48, 23),
    new TimeSpan(12, 00, 47),
};

var query = from hour in Enumerable.Range(0, 24)
            join item in input on hour equals item.Hours into g
            select new
            {
                CallTime = hour,
                CallCount = g.Count(),
            };

foreach (var x in query)
{
    Console.WriteLine("{0:00} {1}", x.CallTime, x.CallCount);
}
Run Code Online (Sandbox Code Playgroud)