Sql Server データベースに「Videos」という名前のテーブルがあります。LINQ to Entities を使用して、C# アプリケーションからそのデータベースのデータにアクセスしています。"Videos" テーブルには、"RecordingStarted" と "RecordingEnded" という名前の 2 つの列が含まれており、録画されたビデオの開始日時と終了日時を単純に示します。各ビデオには一意の ID があり、ユニットに対して記録されます (ここでのユニットとは、携帯電話の例を意味します)。
「ビデオ」テーブルのサンプル データは次のようになります。
UnitID VideoID RecordingStarted RecordingEnded
====================================================================
Unit-1 vid1 2012/1/1 14:30:00 2012/1/1 15:45:10
Unit-1 vid2 2012/2/1 12:30:00 2012/1/1 12:50:00
Unit-2 vid3 2012/3/1 14:30:00 2012/3/1 15:45:10
Unit-2 vid4 2012/4/1 12:30:00 2012/4/1 12:40:00
LINQ to Entities を使用して、レポートの集計データと、各ユニットで記録されたビデオ時間の合計数などの各ユニットの集計データを計算したいと考えています。
出力は次のようになります。
UnitID Total Video Hours
================================================
Unit-1 0.58611
Unit-2 0.41944
次の LINQ to entities クエリを作成しましたが、正しい結果が得られません。(時間は 3600 で割ると 0 に丸められると思います)
IQueryable<dynamic> qry = myContext.Videos
.GroupBy(v => new { v.UnitID })
.Select(g => new
{
g.Key.UnitID,
TotalVideoHours = g.Sum(c => SqlFunctions.DateDiff("s", c.RecordingStarted, c.RecordingEnded)/3600)
});
var result = qry.ToList();
また、2桁に丸められた時間が必要です(Sql Serverから直接取得し、後でメモリ内操作を使用しません)。
どうやってやるの?助けてください。