使用Entity ObjectContext和For循环迭代确定每分钟的行数
本文关键字:每分钟 迭代 ObjectContext Entity For 循环 使用 | 更新日期: 2023-09-27 18:26:33
我有一个SQL Server 2008表,其中一列的数据类型为datetime
。我想要一个实体查询,它为每分钟的间隔生成行数。例如,结果如下:
1. 7/3/2011 14:00:00 | 1000
2. 7/3/2011 14:01:00 | 1097
第一行意味着1000行的datetime
值介于2011年7月3日13:59:00和2011年3月7日14:00:00之间。
第二行意味着1097行的datetime
值介于2011年7月3日14:00:00和2011年3月7日14:01:00之间。
我可以用这个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
有人能帮我使用实体框架获得这个吗
public IQueryable<WMLSLog> GetWMLSLogs()
{
var result = this.ObjectContext.WMLSLogs..........;
//This returns a DateStamp and Count
}
或者使用for循环从IQueryable<WMLSLog>
返回的集合中获取结果。
经过大量的研究,我发现.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);
我得到了预期的结果。