我按多列對一個集合進行分組。LINQ將多列與嵌套集合分組
var groupedAirProducts = airproductsPerClient.GroupBy(ac => new
{
ac.AirProduct.PassengerNameRecord,
ac.AirProduct.Flights.First().MarketingAirlineCode,
ac.AirProduct.Flights.First().FlightNo,
ac.AirProduct.Flights.First().DepartureDate
})
的問題是,我沒有通過第一飛行只想組,但我想包括所有的航班:如果他們在嵌套同一級別的,很容易將它們分組。我想要做的是這樣的:
var groupedAirProducts= airproductsPerClient.GroupBy(ac =>
{
ac.AirProduct.PassengerNameRecord,
foreach(var flight in ac.AirProduct.Flights){
flight.MarketingAirlineCode,
flight.FlightNo,
flight.DepartureDate
}
})
請注意,上面的代碼只是一個想法的例證。這不是一個工作/正確的代碼。我知道如何做到這一點的唯一方法是非常難看和複雜。我想知道是否有一個很好的方法來使用LINQ,或者一個簡單的方法來解決這個問題。
編輯: 解釋更多預期內容。作爲分組的結果,我希望擁有共享相同PassengerNameRecord的airProducts的集合,並且屬於給定空中產品的航班共享相同的MarketingAirlineCode,FlightNo,DepartureDate。我知道如何通過奉承PassengerNameRecord的集合來實現它,所以航班包含在其中,將其分組,所以我有一組共享分組屬性的空氣產品。然後重建受寵若驚的結構。我希望有一種方法可以通過遍歷一些集合來添加groupBy屬性,或者有一種方法來合併分組集合 - 如果有一種方法可以按PassengerNameRecord對集合進行分組,並將集合按照飛行屬性進行分組併合並他們在一起,不幸的是我懷疑有一種簡單的方法來做這種合併。
的「易集團」雙組分不能編譯。您需要使用匿名類型。 – 2014-10-31 10:01:49
所以基本上你想通過一個集合(+ PassengerNameRecord)進行分組?創建一個實現'IEqualityComparer'的類,並帶有適當的'GetHashCode'和'Equals'。 'T'是單個'airproductsPerClient'的類型。 –
2014-10-31 10:06:11
我不確定你瞭解分組是如何工作的 - 它應該將任何給定的實體放入一個組中。在你的例子中,給定多個航班,你可能會得到多個組,同一個實體應該被分配 - 這不再是分組(因此你可能想提供一些關於這應該如何工作的更多信息)。 – decPL 2014-10-31 10:10:18