LINQ查询返回有序分组中的第一项

时间:2013-11-04 15:59:08

标签: linq grouping

分组是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然后按顺序排序。

1 个答案:

答案 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。