我有一个SQL Server 2008表,其列为datetime
数据类型。我想要一个实体查询,它产生每分钟间隔的行数。例如,结果如下所示:
1. 7/3/2011 14:00:00 | 1000
2. 7/3/2011 14:01:00 | 1097
第一行意味着1000行在7/3/2011 13:59:00和7/3/2011 14:00:00之间具有datetime
值。
第二行意味着1097行在7/3/2011 14:00:00和7/3/2011 14:01:00之间具有datetime
值。
我可以使用此sql查询获得此结果
select
stamp = dateadd(mi,datediff(mi,0,[date]) + 1,0),
rows = count(1) from WMLSLog group by dateadd(minute,datediff(mi,0,[date])+1,0)
order by stamp asc
结果:
- stamp rows
- 2012-03-03 16:54:00.000 55
- 2012-03-03 16:55:00.000 120
- 2012-03-03 16:56:00.000 120
有人可以帮助我使用Entity Framework
来解决这个问题public IQueryable<WMLSLog> GetWMLSLogs()
{
var result = this.ObjectContext.WMLSLogs..........;
//This returns a DateStamp and Count
}
或者使用for循环从IQueryable<WMLSLog>
返回的集合中获取结果。
答案 0 :(得分:0)
经过大量研究后,我发现.Net 4获得了System.Data.Objects.SqlClient下的大部分sql函数。它有大多数常见的sql函数,如DateDiff,DateAdd等。 所以我在Linq查询的实体中使用了它们。
DateTime zeroDate = new DateTime(2008, 1, 1, 0, 0, 0);
this.ObjectContext.WMLSLogs.GroupBy(s => SqlFunctions.DateAdd("mi", ((SqlFunctions.DateDiff("mi", zeroDate, s.Date))), zeroDate)).
Select(g => new
{
Date = g.Key,
count = g.Count()
}).OrderBy(x => x.Date);
我得到了预期的结果。