5

我有一张航班价格数据表,我想将排名前 1 位的最便宜航班返回到每个目的地。该表具有以下基本字段:

FlightInfoID
AirportFrom
AirportTo
Price

我尝试了以下操作,但它没有返回我预期的结果,因为特定目的地有多个项目,我只希望每个目的地有 1 个结果,所以如果我有 50 个目的地,我会返回 50 个项目。

lstBestFlightDealsForAllRoutes.OrderBy(p=> p.Price).GroupBy(x => x.AirportTo).First();
4

2 回答 2

7
from f in lstBestFlightDealsForAllRoutes
group f by new { f.AirportFrom, f.AirportTo } into g // group by route
select g.OrderBy(x => x.Price).First() // select cheapest flight 
于 2013-03-11T15:14:58.663 回答
4
  1. 按目的地分组航班
  2. 从每个组中选择组中最便宜的航班

Lniq 使 2 变得困难(Minimum 函数没用),但您可以通过按价格对每个组进行排序并从每个组中选择第一个来做到这一点(以较小的性能成本),例如。

flights.GroupBy(f => f.Destination).Select(g => g.OrderBy(f => f.Cost)).Select(g => g.First())
于 2013-03-11T15:14:18.747 回答