2012-03-04 1 views
1

データ型がdatetimeのSQL Server 2008テーブルがあります。私は毎分の間隔の行の数を生成するエンティティクエリをしたいと思います。例えば、結果は次のようになり:Entity ObjectContextとForループ反復を使用して1分あたりの行数を確認してください

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

は、最初の行が1000行が2011年7月3日夜01時59分00秒と2011年7月3日午後02時00分の間datetime値を有することを意味します。 00。

第二行は1097行が2011年7月3日14時00分00秒と2011年7月3日夜2時01分○○秒の間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 
    } 

またはループのために返されたコレクションIQueryable<WMLSLog>から結果を取得します。

答えて

0

私は、.NET 4がSystem.Data.Objects.SqlClientのSQL関数のほとんどを得ていることがわかりました。それは、DateDiff、DateAddなどのような一般的なSQL関数のほとんどを持っています。 したがって、私はEntity to 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); 

期待通りの結果が得られました。

関連する問題