3

在一张表中,我存储了很多日期时间,用于执行某个操作的时间。数据如下所示:

2012-05-01 14:30:29.8666925
2012-05-01 14:31:58.5422081
2012-05-01 14:35:38.3120864
2012-05-02 06:08:34.6322227
2012-05-02 06:08:54.0864203
2012-05-02 07:31:24.7269620
etc..

我想做的是计算每天采取多少次行动。所以我想要的结果是:

2012-05-01 = 3
2012-05-02 = 3

我试图将日期组合在一起,但在分组时也会考虑“时间”。我的数据库中确实需要这些数据,但在分组时不需要,因为我只想每天查看它。不是每秒。

这是我到目前为止所拥有的,但我不确定如何获得我真正想要的结果。

var actions = (from a in entities.Actions
group a by a.Date
into g
select new
{
    Actions = g.Count() // Not sure if this line is right...
});

任何人都知道如何做到这一点?

4

4 回答 4

2

使用 EntityFunctions.TruncateTime 函数,详见此 SO 帖子:https ://stackoverflow.com/a/9642321/1342632

于 2012-06-07T14:57:11.543 回答
0

您可以简单地使用DateTime.Date修剪时间戳。分组后,您需要确保选择键以及 count(),否则您将只有一堆计数,但您不知道它们映射到什么日期。下面是使用日期的示例。

var actions = (from a in entities.Actions 
                // Note: if a.Date was a DateTime object, you could simply
                // group by 'a.Date.Date'
                group a by DateTime.Parse(a.Date).Date
                into g 
                select new 
                {
                    // Since count is useless on its own, store the date as well.
                    Date = g.Key,
                    Actions = g.Count()
                });

更新:我不再假设 a.Date 是一个字符串。它基于 w00 收到的错误消息,指出在尝试调用 a.Date.ToShortDateString() 时“Linq to Entities 无法识别 System.String.ToShortDateString()”。

我相信实际的错误消息可能是“ LINQ to Entities 无法识别方法'System.String ToShortDateString()' ”(请注意此处未在 System.String 上调用 ToShortDateString())。

于 2012-06-07T14:37:42.550 回答
0

尝试group a by a.Date.Date

DateTime.Date给出相同DateTime但时间组件设置为午夜,因此所有日期都是相同的。

于 2012-06-07T14:38:59.367 回答
0

在EF中,我会试试这个:

var actions = (from a in entities.Actions
group a by a.Date.Date
into g
select new
{
    Actions = g.Count() // Not sure if this line is right...
});

...虽然我不知道这会有多好。

于 2012-06-07T14:39:37.277 回答