0

分组是 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();

我试图找出一个 LINQ 查询,它将查看 subTrips 并为每个VehicleID,找到第一个Odometer,即Odometer对应于最低值TripIDSequence值。

我已经戳了一个小时,但就是想不通。在我放弃并编写程序代码之前,谁能提供一些建议?

更新:为了澄清,Sequence 是行程中每个子行程的序号。因此,当每个分组 VehicleID 中的子行程按 TripID 然后按序列排序时,我正在寻找的是每辆车的第一个子行程的里程表。

4

1 回答 1

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。

于 2013-11-04T16:29:15.493 回答