Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 按小时和类型划分的LINQ组(点击/打开比率)_.net_Linq - Fatal编程技术网

.net 按小时和类型划分的LINQ组(点击/打开比率)

.net 按小时和类型划分的LINQ组(点击/打开比率),.net,linq,.net,Linq,我有一个包含以下字段的表: 操作=>单击/打开 DateTime=>日期和时间操作 发生 例如: 动作|日期时间 点击2010年12月3日凌晨3:00 单击2010年12月3日凌晨3:12 开放时间:2010年12月3日凌晨3:34 点击2010年12月3日上午4:12 单击2010年3月13日下午1:12 等等 我需要按小时对这些文件进行分组,这样我每小时都会有大量的点击和打开 我该怎么做? 谢谢您可以使用lambda执行此操作 var data = new[]

我有一个包含以下字段的表:

  • 操作=>单击/打开
  • DateTime=>日期和时间操作 发生
  • 例如:

    动作|日期时间


  • 点击2010年12月3日凌晨3:00
  • 单击2010年12月3日凌晨3:12
  • 开放时间:2010年12月3日凌晨3:34
  • 点击2010年12月3日上午4:12
  • 单击2010年3月13日下午1:12
  • 等等

    我需要按小时对这些文件进行分组,这样我每小时都会有大量的点击和打开

    我该怎么做?
    谢谢

    您可以使用lambda执行此操作

     var data = new[]
                      {
                            new { Actn = "click", tm = "3/12/2010 3:00AM" },
                            new { Actn = "click"  , tm = "3/12/2010 3:12AM"},
                            new { Actn = "open"  , tm = "3/12/2010 3:34AM"},
                            new { Actn = "click"  , tm = "3/12/2010 4:12AM"},
                            new { Actn = "click"  , tm = "3/13/2010 1:12PM"}
                      };
    
                var groupby = data.GroupBy(r => new { Convert.ToDateTime(r.tm).Hour, r.Actn });
    
                foreach (var group in groupby)
                {
                    Console.WriteLine("{0} = {1}", group.Key, group.Count());
                }
    

    您可以使用lambda来执行此操作

     var data = new[]
                      {
                            new { Actn = "click", tm = "3/12/2010 3:00AM" },
                            new { Actn = "click"  , tm = "3/12/2010 3:12AM"},
                            new { Actn = "open"  , tm = "3/12/2010 3:34AM"},
                            new { Actn = "click"  , tm = "3/12/2010 4:12AM"},
                            new { Actn = "click"  , tm = "3/13/2010 1:12PM"}
                      };
    
                var groupby = data.GroupBy(r => new { Convert.ToDateTime(r.tm).Hour, r.Actn });
    
                foreach (var group in groupby)
                {
                    Console.WriteLine("{0} = {1}", group.Key, group.Count());
                }
    
    输出:

    2 - Click - 3
    1 - Open - 3
    1 - Click - 4
    1 - Click - 13
    这就是你要找的

    输出:

    2 - Click - 3
    1 - Open - 3
    1 - Click - 4
    1 - Click - 13
    这就是你要找的吗?

    我是这样解决的:

            List<MySummary> summary =
                entries.Select(i => new { i, dt = i.Date }).GroupBy(
                    @t => new { date = @t.dt.Date, time = @t.dt.Hour }, @t => @t.i).Select(
                        g =>
                        new MySummary()
                            {
                                Date = g.Key.date.AddHours(g.Key.time),
                                Opens = g.Count(x => x.Type == "Open"),
                                Clicks = g.Count(x => x.Type == "Click")
                            }).ToList();
    
    我是这样解决的:

            List<MySummary> summary =
                entries.Select(i => new { i, dt = i.Date }).GroupBy(
                    @t => new { date = @t.dt.Date, time = @t.dt.Hour }, @t => @t.i).Select(
                        g =>
                        new MySummary()
                            {
                                Date = g.Key.date.AddHours(g.Key.time),
                                Opens = g.Count(x => x.Type == "Open"),
                                Clicks = g.Count(x => x.Type == "Click")
                            }).ToList();
    

    小心,尽管我不确定,但我认为s.time.hour分组返回的是每天3点而不是每天每小时的分组。小心,尽管我不确定,但我认为s.time.hour分组返回的是每天3点而不是每天每小时的分组。