2012-03-04 43 views
1

我有一個SQL Server 2008表,其中有一列datetime數據類型。我想要一個實體查詢來生成每個分鐘間隔的行數。例如,結果是這樣的:使用Entity ObjectContext和For循環迭代確定每分鐘行數

1. 7/3/2011 14:00:00 | 1000 
2. 7/3/2011 14:01:00 | 1097 

第一行就意味着1000行具有2011/7/3十三時59分零零秒和2011/7/3 14:00之間的datetime值: 00。

第二行意味着1097行在2011年7月3日14:00:00和2011年7月3日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 

有人可以幫助我得到這個使用實體框架

public IQueryable<WMLSLog> GetWMLSLogs() 
    { 
     var result = this.ObjectContext.WMLSLogs..........; 
     //This returns a DateStamp and Count 
    } 

還是一個for循環從IQueryable<WMLSLog>返回的集合中獲得結果。

回答

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); 

我得到了預期的結果。