【问题标题】:How to get datetime group by days via LINQ C#如何通过 LINQ C# 按天获取日期时间组
【发布时间】:2015-04-25 17:54:43
【问题描述】:

我有一个包含整月数据的数据表。现在我想通过 linq 按天获取这些数据组。我已经有这个查询,但我需要一些改变。我的一天从 7 点开始,到第二天 7 点结束。我目前的查询是:

var query = dt.AsEnumerable()
    .GroupBy(row => new
    {
        day = row.Field<DateTime>("dateandTime"),
        Code = row.Field<string>("Code"),
        Name = row.Field<string>("Name")
    })
    .Select(g => new
    {
        Name = g.Key.Name,
        day = g.Key.day,
        Code = g.Key.Code,
        quantity = g.Count()
    }
        );

dateandtime 合成为:2014-01-02 05:26:10.567

如何从数据表组中获取整月的天数?

我想要7点到7点的数据。如果月末,最后日期数据也应该得到下一个日期到7点的数据。

【问题讨论】:

  • "dateandtime 格式是:2014-01-02 05:26:10.567" - 不,不是,它是 DateTime...
  • dateandtime 是变量名。
  • 显然,这是行中的字段名称。但如果它真的是一个DateTime 字段,那么它就没有格式——每个值都只是一个DateTime

标签: c# linq


【解决方案1】:

在将日期/时间相应地调整 7 小时后,只需按 DateTime 值的 Day 属性分组即可。当然,如果您实际上涉及多个月/年,那会给您带来一些奇怪的结果,但是...

.GroupBy(row => new
{
    Day = row.Field<DateTime>("dateandTime").AddHours(-7).Day,
    Code = row.Field<string>("Code"),
    Name = row.Field<string>("Name")
})

(注意:您需要确保查找一个月数据的原始查询考虑了 7 小时班次。此外,如果这 7 小时班次实际上是由于时区,可能会有更好的选项。)

【讨论】:

  • 我说我的一天从 7 点开始,到第二天 7 点结束。上面的查询给出了 12 到 12 的数据。
  • @bogojane:啊,我错过了那一点。不过很容易修复 - 编辑。
  • 感谢@Jon Skeet,这正是我想要的。如果我有全年的数据,也可以按月分组。条件相同,即 7 到 7。
  • @bogojane:只需对 Month 执行相同操作即可作为分组中的另一个属性:Month = row.Field&lt;DateTime&gt;("dateandTime").AddHours(-7).Month
  • 知道了!!感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-02
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 2016-11-09
  • 2011-08-07
  • 1970-01-01
相关资源
最近更新 更多