我有一个返回大量记录的查询。
例如:
我使用了以下查询:
var sData = vehicle.GsmDeviceLogs
.Where(gs => gs.Speed > zeroSpeed && !gs.DigitalInputLevel1)
.OrderBy(gs => gs.DateTimeOfLog)
.ToList();
现在,我只想获取每个日期的第一条记录。即。
答案 0 :(得分:7)
你在问题中给出了答案,分组然后选择第一个。 从技术上讲,您可以将其翻译为linq,如下所示:
var sData = vehicle.GsmDeviceLogs
.Where(gs => gs.Speed > zeroSpeed && !gs.DigitalInputLevel1)
.OrderBy(gs => gs.DateTimeOfLog)
.GroupBy(gs => gs.DateTimeOfLog)
.Select(gs => gs.First())
.ToList();
答案 1 :(得分:0)
您应该按DateTimeOfLog.Date
(返回仅包含日期部分的DateTime
)对记录进行分组,然后通过Select
获取每个组中的第一个,如下所示:
var data = logs.Where( ... )
.GroupBy( l => l.DateTimeOfLog.Date )
.Select( g => new { Date = g.Key, Log = g.First() } );
(我使用的是匿名类型;您可能更喜欢使用元组,具体取决于您使用该数据的方式)