2

我有一个 LINQ 查询,目前是这样的:

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

但是,Records 集合过去每两秒记录一次,现在它每小时记录一次。我需要一种仅从旧数据中抓取一个记录一小时的方法,以便返回的数据更有意义,因此我不会返回每 2 秒记录的数月数据......任何帮助都会很棒。

4

2 回答 2

4

因此,您每小时只需要一条记录。这意味着您需要按小时分组:

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 回答