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 に答える