0

我正在尝试平均与同一日期关联的数据,并且我正在尝试使用 linq 从 datetime 中提取日期。我可以在 mysql workbench 中执行此操作并获得我想要的结果:

select avg(pl.time), Date(pl.created_at) as date
from page_loads as pl
join sites as s
on pl.site_id = s.id
join test_runs as t
on pl.test_run_id = t.id
where s.3id = 17
group by date

我将如何在 linq 中执行此操作。到目前为止我有这个:

var data = from pl in page_loads
           join s in sites 
           on pl.site_id equals s.id
           join t in test_runs
           on pl.test_run_id equals t.id
           where s.3id == 17
           select new { time = pl.time, created_at = pl.created_at };

这给了我以下结果:

4034    2012-06-06 00:15:48
5649    2012-06-06 00:31:05
4275    2012-06-06 01:48:54
4352    2012-06-07 06:50:27
5672    2012-06-07 07:05:15
7510    2012-06-07 17:49:25
10366   2012-06-07 17:49:53
12193   2012-06-07 18:32:28
3681    2012-06-07 18:55:42
7951    2012-06-07 18:59:59
2273    2012-06-07 19:26:38
6816    2012-06-08 22:41:48
6918    2012-06-08 22:44:40
3702    2012-06-08 23:03:58
3065    2012-06-08 23:04:58
5981    2012-06-19 20:46:40
1695    2012-06-19 20:48:36
4323    2012-06-19 20:50:24

但我想平均与同一日期相关的数字,我想从日期时间戳中提取日期。

4

2 回答 2

1

您要做的是根据日期分组获得平均值,但是您编写的 LINQ 不包含 group 子句。您可以从查看 LINQ 示例开始。这个LINQ 聚合运算符将为您提供一个可以使用的示例。

于 2012-06-20T06:10:02.863 回答
0

任何 DateTime 上的 Date 属性都会为您提供该日期的 DateTime。
即:(new DateTime(2001,1,1,13,1,1)).Date应该等于new DateTime(2001,1,1)

像这样的东西应该适用于内存对象

var data = from pl in page_loads
       join s in sites 
       on pl.site_id equals s.id
       join t in test_runs
       on pl.test_run_id equals t.id
       where s.3id == 17

       group pl by pl.created_at.Date into g 
       select new { time = g.Average(t=>t.time), created_at = g.Key };

编辑:堆栈溢出问题LINQ to Entities group-by failure using .date有一个已接受的答案,其中详细说明了如何使用适用于 Entity Framework/LINQ to SQL 的方法。

您需要将组行修改为:

       group pl by EntityFunctions.TruncateTime(pl.created_at) into g 

但除此之外,解决方案的其余部分保持不变。

于 2012-06-20T06:04:15.750 回答