从日期时间计算金额作为日期

时间:2012-06-07 14:29:20

标签: c# entity-framework

在表格中,我已经存储了很多日期时间,用于采取某项行动。数据如下所示:

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 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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收到的错误消息,指出“Linq to Entities在尝试调用a.Date.ToShortDateString()时无法识别System.String.ToShortDateString()”。

我认为实际的错误消息可能是“LINQ to Entities does not recognize the method 'System.String ToShortDateString()'”(注意这里没有在System.String上调用ToShortDateString())。

答案 2 :(得分:0)

尝试group a by a.Date.Date

DateTime.Date提供相同的DateTime,但时间组件设置为午夜,因此对于您的所有日期都是相同的。

答案 3 :(得分: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...
});

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