3

テーブルには、特定のアクションが実行されたときの日時がたくさん保存されています。データは次のようになります。

2012-05-01 14:30:29.8666925
2012-05-01 14:31:58.5422081
2012-05-01 14:35:38.3120864
2012-05-02 06:08:34.6322227
2012-05-02 06:08:54.0864203
2012-05-02 07:31:24.7269620
etc..

私がやりたいのは、1日に何回アクションが行われたかを数えることです。だから私が望む結果は次のとおりです。

2012-05-01 = 3
2012-05-02 = 3

日付をグループ化しようとしましたが、グループ化するときに「時間」も考慮されます。データベースでこのデータが必要ですが、グループ化するときは必要ありません。1 日ごとに見たいだけだからです。毎秒ではありません。

これは私がこれまでに持っているものですが、実際に必要な結果を得る方法がわかりません。

var actions = (from a in entities.Actions
group a by a.Date
into g
select new
{
    Actions = g.Count() // Not sure if this line is right...
});

誰でもこれを行う方法を知っていますか?

4

4 に答える 4

2

この SO 投稿で詳しく説明されているように、EntityFunctions.TruncateTime 関数を使用します: https://stackoverflow.com/a/9642321/1342632

于 2012-06-07T14:57:11.543 に答える
0

単純にDateTime.Dateを使用して、タイムスタンプを切り取ることができます。グループ化した後、count() と同様にキーを選択したことを確認する必要があります。そうしないと、カウントがたくさんあるだけで、それらがどの日付にマップされているかわかりません。以下は Date を使用した例です。

var actions = (from a in entities.Actions 
                // Note: if a.Date was a DateTime object, you could simply
                // group by 'a.Date.Date'
                group a by DateTime.Parse(a.Date).Date
                into g 
                select new 
                {
                    // Since count is useless on its own, store the date as well.
                    Date = g.Key,
                    Actions = g.Count()
                });

更新: a.Date が文字列であるとは想定していません。これは、a.Date.ToShortDateString() を呼び出そうとしたときに「Linq to Entities が System.String.ToShortDateString() を認識しない」というエラー メッセージを w00 が受け取ったことに基づいていました。

実際のエラー メッセージは、おそらく「LINQ to Entities はメソッド 'System.String ToShortDateString()' を認識しません」であると思います(ToShortDateString() が System.String で呼び出されていないことに注意してください)。

于 2012-06-07T14:37:42.550 に答える
0

in EF, I would try this:

var actions = (from a in entities.Actions
group a by a.Date.Date
into g
select new
{
    Actions = g.Count() // Not sure if this line is right...
});

...although I don't know how performant this would be.

于 2012-06-07T14:39:37.277 に答える
0

試すgroup a by a.Date.Date

DateTime.Date同じDateTimeですが、時間コンポーネントが真夜中に設定されているため、すべての日付で同じになります。

于 2012-06-07T14:38:59.367 に答える