【问题标题】:cal-heatmap data from linq query来自 linq 查询的 cal-heatmap 数据
【发布时间】:2015-07-03 12:55:16
【问题描述】:

我开始使用 d3 和 cal-heatmap 并且遇到了与数据相关的问题。

根据文档 (http://kamisama.github.io/cal-heatmap/#data-format),需要以类似 http://kamisama.github.io/cal-heatmap/datas-years.json 的格式提供数据

我正在使用 LinqPad4:

int userId = 4;
DateTime start = new DateTime(2015, 1 , 2);
DateTime end = new DateTime(2015, 6, 30);

var result = (from r in Response
    where (r.RespondentUserId == userId)
    && (r.ResponseBegin >= start)
    && (r.ResponseBegin <= end)
    group r by new { date = r.ResponseBegin.Date } into grp
    select new 
    {
        Ticks = grp.Key.date.Ticks,
        Reports = grp.Count()
    })
    .ToList()
    .Select (r => new 
    { 
        timestamp = new TimeSpan(r.Ticks).TotalSeconds,
        value = r.Reports
    });

    new JavaScriptSerializer().Serialize(result).Dump();

产生这种格式:

[{"timestamp":63556099200,"value":2},{"timestamp":63556185600,"value":4},{"timestamp":63556272000,"value":2},{"timestamp" :63556358400,"value":1},{"timestamp":63556704000,"value":2},{"timestamp":63556790400,"value":1},{"timestamp":63556876800,"value":1 },{"timestamp":63556963200,"value":1},{"timestamp":63557222400,"value":1},{"timestamp":63557308800,"value":1},{"timestamp":63557827200 ,"value":1},{"timestamp":63557913600,"value":1},{"timestamp":63558000000,"value":2},{"timestamp":63558086400,"value":1}, {"timestamp":63558172800,"value":1},{"timestamp":63559296000,"value":3},{"timestamp":63559728000,"value":2},{"timestamp":63559814400,"值":1},{"timestamp":63559900800,"value":3},{"timestamp":63559987200,"value":1},{"timestamp":63560246400,"value":2},{"时间戳":63560332800,"value":1},{"timestamp":63560419200,"value":2},{"timestamp":63560505600,"value":2},{"timestamp":63560592000,"value" :1},{"timestamp":63560937600,"value":1},{"timestamp":63561456000,"value":4},{"timestamp":63561801600 ,"value":2},{"timestamp":63562060800,"value":2},{"timestamp":63562147200,"value":1},{"timestamp":63562233600,"value":2}, {"timestamp":63562320000,"value":1},{"timestamp":63562406400,"value":1},{"timestamp":63562665600,"value":1},{"timestamp":63562752000," value":1},{"timestamp":63562838400,"value":2},{"timestamp":63562924800,"value":1},{"timestamp":63563270400,"value":2},{"时间戳":63563961600,"value":2},{"timestamp":63564048000,"value":2},{"timestamp":63564134400,"value":3},{"timestamp":63564220800,"value" :3},{"timestamp":63564566400,"value":2},{"timestamp":63564739200,"value":2},{"timestamp":63564825600,"value":1},{"timestamp" :63565084800,"value":2},{"timestamp":63565171200,"value":1},{"timestamp":63565257600,"value":2},{"timestamp":63565344000,"value":2 },{"timestamp":63565430400,"value":3}]

linq 查询可以直接产生正确的格式吗?

【问题讨论】:

    标签: linq cal-heatmap


    【解决方案1】:

    你已经很接近了。你要做的是创建一个Dictionary,序列化后的格式会是你想要的格式:

    var result = (from r in Response
        where (r.RespondentUserId == userId)
        && (r.ResponseBegin >= start)
        && (r.ResponseBegin <= end)
        group r by new { date = r.ResponseBegin.Date } into grp
        select new 
        {
            Ticks = grp.Key.date.Ticks,
            Reports = grp.Count()
        })
        .ToDictionary(r => new TimeSpan(r.Ticks).TotalSeconds, r => r.Reports);
    
    new JavaScriptSerializer().Serialize(result).Dump();
    

    【讨论】:

      【解决方案2】:

      最终代码:

      var result = (from r in Response
          where (r.RespondentUserId == userId)
          && (r.ResponseBegin >= start)
          && (r.ResponseBegin <= end)
          group r by new { date = r.ResponseBegin.Date } into grp
          select new 
          {
              Ticks = grp.Key.date.Ticks,
              Reports = grp.Count()
          })
          .ToDictionary(r => new TimeSpan(r.Ticks).TotalSeconds.ToString(), r => r.Reports);
      
      new JavaScriptSerializer().Serialize(result).Dump();
      

      【讨论】:

        猜你喜欢
        • 2016-07-23
        • 1970-01-01
        • 2011-10-29
        • 1970-01-01
        • 1970-01-01
        • 2015-07-03
        • 1970-01-01
        • 1970-01-01
        • 2015-03-01
        相关资源
        最近更新 更多