2013-03-11 10 views
5

Mam tabelę danych o cenach lotów i chcę zwrócić 1 najtańszy lot do każdego miejsca docelowego. Tabela ma następujące podstawowe dziedziny:Linq GroupBy. Zwróć pierwszą pozycję z podzestawu danych.

FlightInfoID 
AirportFrom 
AirportTo 
Price 

Próbowałem następujących ale nie zwrócić wyników się spodziewałem, ponieważ było kilka pozycji do konkretnego miejsca i chcę tylko 1 wynik za miejsca, więc jeśli mam 50 miejsca przeznaczenia Otrzymałbym 50 przedmiotów zwróconych.

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

przełącznik GroupBy i orderby. – Romoku

Odpowiedz

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 
+1

To się udało, chłopaki! – Damo

4
  1. Grupa loty według miejsca przeznaczenia
  2. z każdej grupy wybrać lotu w grupie

Lniq sprawia 2 trudne (Minimum funkcja jest bezużyteczny), ale można to zrobić (przy niewielkim koszcie wykonania), zamawiając każdą grupę według ceny i wybierając pierwszą z każdej grupy, np.

flights.GroupBy(f => f.Destination).Select(g => g.OrderBy(f => f.Cost)).Select(g => g.First()) 
Powiązane problemy