分组是LINQ的一个领域,我还没有完全理解。我有以下代码:
var subTrips = tbTripData
.Where(t => selectedVehicleIds.Contains(t.VehicleID))
.Join(tbSubTripData,
t => t.TripID,
s => s.TripID,
(t, s) => new { t = t, s = s })
.Select(r =>
new SubTrip
{
VehicleID = r.t.VehicleID,
TripID = r.t.TripID,
Sequence = r.s.Sequence,
TripDistance = r.s.TripDistance,
Odometer = r.s.Odometer
})
.ToList();
我正在尝试查找将查看subTrips的LINQ查询,并查找每个VehicleID
,找到第一个Odometer
,即对应于最低{{1}的Odometer
}和TripID
值。
我一直在盯着它看了一个小时但却无法理解。在我放弃并编写程序代码之前,任何人都可以提供一些建议吗?
更新:为了澄清,Sequence是行程中每个子带的序号。所以我正在寻找的是每个车辆的第一个子行程的里程表,当每个分组的VehicleID中的子行程按TripID然后按顺序排序。
答案 0 :(得分:1)
我不是100%正在寻找的东西。但这可能会让你开始朝着正确的方向前进。
var groupedList = (from s in subTrips
group s by s.VehicleID
into grp
select new
{
VehicleID = grp.Key,
Odometer = grp.OrderBy(ex => ex.TripID).Select(ex => ex.Odometer).First(),
TripID = grp.Min(ex => ex.TripID)
}
).ToList();
这将返回VehicleID,与最低TripID相对应的里程表和最低的TripID。