簡體   English   中英

如何分組然后在LINQ中選擇元素到新類(最好是C#)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM