I want to select elegantly foreach unique couple (departuretime, arrivaltime, travelclass) , the best records with lower price as bold here in the table.
This is below the code which brings me lines of result.
tripRepository.FindBy(x => x.SearchID == id).Include(b => b.Results)
- DepartureTime ArrivalTime TravelClass Price
====================================================================================
- 01/08/2013 09:13:00 01/08/2013 10:14:00 economy 4700
- 01/08/2013 09:13:00 01/08/2013 10:14:00 first 8300
- 01/08/2013 09:13:00 01/08/2013 10:14:00 economy 2750
- **01/08/2013 09:13:00 01/08/2013 10:14:00 first 3600**
- **01/08/2013 09:13:00 01/08/2013 10:14:00 economy 2000**
- 01/08/2013 10:11:00 01/08/2013 11:14:00 economy 4700
- 01/08/2013 10:11:00 01/08/2013 11:14:00 first 8300
- 01/08/2013 10:11:00 01/08/2013 11:14:00 economy 2750
- 01/08/2013 10:11:00 01/08/2013 11:14:00 first 2950
- **01/08/2013 10:11:00 01/08/2013 11:14:00 economy 2000**
- **01/08/2013 10:11:00 01/08/2013 11:14:00 first 2800**
Thanks you very much
.GroupBy(m => new {
m.DepartureTime,
m.ArrivalTime,
m.TravelClass
})
.Select(g => g.OrderBy(x => x.Price).First());
You should be able to do something like the following:
var result = yourRepo.OrderBy(p => p.Price)
.ThenBy(n => n.Name)
.Take(stuff.Select(q => q.Name)
.Distinct()
.Count());
In the same way that I posted here : https://stackoverflow.com/a/16567385/2385557
try this :
public class Test
{
public void Exec()
{
var items = new List<Item>{
new Item { DepartureTime = "01/08/2013 09:13:00", ArrivalTime = "01/08/2013 10:14:00", TravelClass="economy" , Price = 4700 },
new Item { DepartureTime = "01/08/2013 09:13:00", ArrivalTime = "01/08/2013 10:14:00", TravelClass="first" , Price = 8300 },
new Item { DepartureTime = "01/08/2013 09:13:00", ArrivalTime = "01/08/2013 10:14:00", TravelClass="economy" , Price = 2750 },
new Item { DepartureTime = "01/08/2013 09:13:00", ArrivalTime = "01/08/2013 10:14:00", TravelClass="first" , Price = 3600 },
new Item { DepartureTime = "01/08/2013 09:13:00", ArrivalTime = "01/08/2013 10:14:00", TravelClass="economy" , Price = 2000 },
new Item { DepartureTime = "01/08/2013 10:11:00", ArrivalTime = "01/08/2013 11:14:00", TravelClass="economy" , Price = 4700 },
new Item { DepartureTime = "01/08/2013 10:11:00", ArrivalTime = "01/08/2013 11:14:00", TravelClass="first" , Price = 8300 },
new Item { DepartureTime = "01/08/2013 10:11:00", ArrivalTime = "01/08/2013 11:14:00", TravelClass="economy" , Price = 2750 },
new Item { DepartureTime = "01/08/2013 10:11:00", ArrivalTime = "01/08/2013 11:14:00", TravelClass="first" , Price = 2950 },
new Item { DepartureTime = "01/08/2013 10:11:00", ArrivalTime = "01/08/2013 11:14:00", TravelClass="economy" , Price = 2000 },
new Item { DepartureTime = "01/08/2013 10:11:00", ArrivalTime = "01/08/2013 11:14:00", TravelClass="first" , Price = 2800 },
};
var result = items
.GroupBy(groupedItems => new { groupedItems.DepartureTime, groupedItems.ArrivalTime, groupedItems.TravelClass })
.SelectMany(i => items
.Where(innerItem =>
(innerItem.DepartureTime == i.Key.DepartureTime
&& innerItem.ArrivalTime == i.Key.ArrivalTime
&& innerItem.TravelClass == i.Key.TravelClass)
&& innerItem.Price == i.Min(ii => ii.Price))
.Select(innerItem => innerItem)
);
foreach (var item in result)
Console.WriteLine("Cheapest flight with departure at {0}, arrival at {1} and in travel class {2} costs {3}", item.DepartureTime, item.ArrivalTime, item.TravelClass, item.Price);
}
private class Item
{
public String DepartureTime { get; set; }
public String ArrivalTime { get; set; }
public String TravelClass { get; set; }
public Int32 Price { get; set; }
}
}
the output gives :
Cheapest flight with departure at 01/08/2013 09:13:00, arrival at 01/08/2013 10:14:00 and in travel class economy costs 2000
Cheapest flight with departure at 01/08/2013 09:13:00, arrival at 01/08/2013 10:14:00 and in travel class first costs 3600
Cheapest flight with departure at 01/08/2013 10:11:00, arrival at 01/08/2013 11:14:00 and in travel class economy costs 2000
Cheapest flight with departure at 01/08/2013 10:11:00, arrival at 01/08/2013 11:14:00 and in travel class first costs 2800
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.