簡體   English   中英

使用TimeSpan.Hours在Linq中分組

[英]Grouping in Linq with TimeSpan.Hours

我有一個具有以下列的數據表

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

現在我想要像這樣使用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

我正在使用以下查詢,該查詢使我得到的值具有計數> 0,但我想獲得那些也具有計數= 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);

這個查詢給我結果像

Hrs   Count
00    1
01    1
05    1
12    1
15    2

執行第一個集合為Enumerable.Range(0, 24) Foundrows.AsEnumerable() 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);
}

這樣的事情應該起作用:

var groupQueryTimeTotal = 
  Enumerable.Range(0, 24).Select(h => new { CallTime = h,
  CallCount = Foundrows.AsEnumerable()
  .Count(r => TimeSpan.Parse(r.Field<string>("Call Time")).Hours == h), });

當然,解析相同的字符串很多次實際上效率很低。 這是另一種方法:

var groupQueryTimeTotal = new int[24];
foreach (var r in Foundrows)
{
  int hour = TimeSpan.Parse(r.Field<string>("Call Time")).Hours;
  ++groupQueryTimeTotal[hour];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM