2

現在、次のようなLINQクエリがあります。

var query = from l in Records
            where l.time >= time1 && l.time <= time2
            select l;

ただし、以前は 2 秒ごとに記録されていた Records コレクションが、1 時間ごとに記録されるようになりました。古いデータから 1 時間に 1 つのレコードだけを取得する方法が必要です。これにより、返されるデータがより意味のあるものになり、2 秒ごとに記録された月のデータを返さなくなります...どんな助けも素晴らしいでしょう。

4

2 に答える 2

4

したがって、1 時間に 1 つのレコードだけが必要です。つまり、時間ごとにグループ化する必要があります。

var query = records
            .Where(r => r.time >= time1 && r.time <= time2)
            .Select(r => new
            {
                Hour = new DateTime(r.time.Year, r.time.Month, r.time.Day, r.time.Hour, 0, 0),
                Record = r
            })
            .GroupBy(x => x.Hour)
            .Select(grp => grp.First().Record);
于 2012-05-10T09:45:10.967 に答える
1

時間ごとにグループ化し、各時間の最初の要素を選択する必要があります。

これを試して:

var query = from l in Records
            where l.time >= time1 && l.time <= time2
            group l by l.time.Hour into g
            select g.First();
于 2012-05-10T09:26:11.087 に答える