[英]How to group then select elements into new class in LINQ (C# preferably)
嗨,我試圖讓我的頭圍繞分組,然后在結果中構建我自己的類。 我知道group by的結果是一個IGrouping集合,但是我可以在構建它們的時候訪問這些行,以便使用自定義類向它們添加幾個標志嗎?
我有一個名為FlightTimes的類,有一些數據,但我想在行中附加一些數據,比如FlagRedEye。 所以我用原始的FlightTime類數據和標志創建了一個名為FlightTimeResult的類。
我可以這樣做嗎? 我似乎無法弄清楚如何讓它工作。 我喜歡使用強類型,直到我理解發生了什么。 我不得不改變一些事情來保護我的客戶端,所以我為任何語法錯誤道歉。
IGrouping<string, FlightTimeResult> FlightTimes =
( from flighttimes in schedules.FlightTimes
group flighttimes by flighttimes.FlightType.ToString()
into groupedFlights
select new FlightTimeResult( )
{
FlightTimeData = FlightTime, // Original class data
FlagRedEye = (FlightTime.departureTime.Hour >= 0 &&
FlightTime.departureTime.Hour < 6) // Extra flag
} )
目標是擁有一個按FlightType分組的FlightTimesResult(FlightTime +額外標志)的集合。 不確定如何訪問查詢中的各個FlightTime行'select new FlightTimeResult()'
我是否需要在groupedFlights上使用嵌套查詢?
非常感謝你。
通過以下方式顯式調用Linq函數是最簡單的方法:
IQueryable<IGrouping<string, FlightTimeResult>> query
= schedules.FlightTimes.GroupBy(
ft => ft.FlightType.ToString(), // key
ft => new FlightTimeResult() { // your constructed objects for key
FlightTimeData = ft,
FlagRedEye = (ft.departureTime.Hour >= 0 && ft.departureTime.Hour < 6)
}
);
兩參數GroupBy
運算符函數將兩個lambdas作為參數 - 一個用於提取鍵,第二個用於為其提取值。
還要記住, 按操作分組 ( group itm by key
構造或GroupBy
調用將它group itm by key
)會返回IGrouping<,>
s的集合 - 而不是單個集合。
因此它將是IEnumerable<IGrouping<,>>
或IQueryable<IGrouping<,>>
。
我認為你走在正確的軌道上。 不是通過FlightType對FlightTimes進行分組,而是嘗試構建FlightTimeResults並將其分類為FlightType:
var results =
from ft in schedules.FlightTimes
group new FlightTimeResult
{
FlightTimeData = ft,
FlagRedeye = ft.DepartureTime.Hour >= 0 && ft.DepartureTime.Hour < 6
}
by ft.FlightType.ToString()
into groupedFlights
select groupedFlights;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.