LINQ过滤两次和每小时

时间:2012-05-10 09:10:17

标签: c# linq

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

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

但是,Records集合用于每两秒登录一次,现在每小时记录一次。我需要一种只从旧数据中获取一个记录一个小时的方法,这样返回的数据就更有意义了,所以我不会每2秒返回几个月的数据...任何帮助都会很棒。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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();