3

こんにちは、オブジェクトのコレクションを DateTime プロパティでグループ化しようとしていますが、奇妙な問題が発生しています。現在、私は以下を持っています:

TimeSpan interval = TimeSpan.FromMinutes(45);
var selected = from date in item.Dates
               group date by (date.Ticks / interval.Ticks) into g
               select g;

これは基本的に機能しますが、最初のアイテムの時間が 11:45 の場合、最初のグループの長さは 15 分しかありません。12:00 から始まる次のグループが続き、そこから正しくグループ化されます。本当に単純なものが欠けているのでしょうか、それともグループ化の方法を変更する必要がありますか? 私が実際にやろうとしているのは、すべてのオブジェクトを 45 分のチャンクにグループ化することです。

4

2 に答える 2

1

ここでの問題は、「時間グループ軸」(45 分) で単位を定義したが、軸の開始位置を明示的に定義していないことです。

現在のコードでは、グループ化は 00:00 に開始されるため、最終的に 11:15 に到達するたびに 45 分を追加すると、11:15-12:00 グループの開始になります。実際にそのグループに入る最初のイベントの時間は関係ありません。

最初のイベントが発生した正確な時刻から始まる 45 分のグループが必要な場合は、次のように補正します。

// In your current version this is effectively TimeSpan.Zero
var startOfAxis = item.Dates.Min().TimeOfDay;

var interval = TimeSpan.FromMinutes(45);
var selected = 
    from date in item.Dates
    group date by ((date.Ticks - startOfAxis.Ticks) / interval.Ticks) into g
    select g;
于 2013-08-06T13:23:41.103 に答える