簡體   English   中英

如何在Linq中排序帶有列表的分組結果?

[英]How do I order a group result with a list, in Linq?

此linq為我提供了所有房間,並按rateCode進行了分組。

var results = (from r in dcCrs.CRS_RateTypePerReservation
                   where r.Reservation_id_fk == reservation.Reservation_id_pk 
                      && r.RoomTypeCenter_id_fk != null 
                      && r.Price != 0
               group r.RoomTypesPerCenter.RoomTypes.Code by r.CRS_RateTypes.Name into g
               select new { rateCode = g.Key, roomName = g.ToList() });

但是現在我必須通過數據庫中一個名為Order的Integer對結果進行排序:

var results = (from r in dcCrs.CRS_RateTypePerReservation
                   where r.Reservation_id_fk == reservation.Reservation_id_pk 
                      && r.RoomTypeCenter_id_fk != null 
                      && r.Price != 0
                   orderby r.Order ascending
                   group r.RoomTypesPerCenter.RoomTypes.Code by r.CRS_RateTypes.Name into g
                   select new { rateCode = g.Key, roomName = g.ToList() });

這僅訂購房間的名稱,而不訂購兩個房間的名稱。

數據:

Order   Rates      RoomType 
5       PER        DBL  
30      PER        IND
15      BAR        IND
10      BAR        DBL  
20      BAR        URB  

它應該給出此結果,因為第一個是5和30(PER),然后是10、15和20(BAR):

   {rateCode = PER, roomName = {DBL, IND} }

   {rateCode = BAR, roomName = {DBL, IND, URB} }

但這返回了我:

   {rateCode = BAR, roomName = {DBL, IND, URB} }

   {rateCode = PER, roomName = {DBL, IND} }

感謝您的任何建議。

數據庫GROUP BY查詢結果的鍵順序未定義。

您需要在分組后應用排序,例如

var results = 
   (from r in dcCrs.CRS_RateTypePerReservation
    where r.Reservation_id_fk == reservation.Reservation_id_pk 
        && r.RoomTypeCenter_id_fk != null 
        && r.Price != 0
    group r by r.CRS_RateTypes.Name into g
    orderby g.Min(r => r.Order)
    select new
    {    
        rateCode = g.Key,
        roomName = (from r in g orderby r.Order select r.RoomTypesPerCenter.RoomTypes.Code).ToList()
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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