0

他のクラスルームのリストを内部的に構成するクラスタイプのホテルのリストがあります。降順ソートを実行すると、ホテルが降順でソートされますが、linq を使用して部屋のリストを価格で内部的にソートする必要もあります。以下はクラス構造のスケッチです

class Hotel
       - property hotelname (string)
       - property rooms  (list of rooms)

class rooms
      - property roomdesc (string)
      - property roomcharge (decimal)

以下の方法で降順と昇順のコードを適用しました。

lstHotels.OrderByDescending(Function(hotel) hotel.Rooms(0).roomcharge).ToList()

これは、ホテルを客室料金に従って降順で並べ替えます。0 番目のインデックス ルームは、常に最低料金です。また、降順で並べ替えると、部屋のリストも並べ替えたいと思います。

前もって感謝します。

4

3 に答える 3

0

これらのクラスがあると仮定します:

public class Hotel
{
    public string Name { get; set; }
    public List<Room> Rooms { get; set; } // List<Room> to keep it simple, 
                                          // you could/should expose it 
                                          // in a better way
}

public class Room
{
    public string Description { get; set; }
    public decimal Charge { get; set; }
}

Roomsメンバーを並べ替えるのではなく、匿名型を介して新しいデータ構造に目的の並べ替えを投影する Linq クエリを実行するのが正しいアプローチだと思います。

var report = from o in offers
             orderby o.Name descending
             select new 
             { 
                o.Name, 
                Rooms = from r in o.Rooms
                        orderby r.Charge
                        select r 
             };

このようにして、最初のメンバーがホテルの名前である匿名型の列挙を取得し、2 番目のメンバーが希望する方法で並べ替えられた部屋の列挙を取得します。必要に応じて、ホテル インスタンス全体を投影で に置き換えて公開することo.Nameをお勧めします。Hotel = o

于 2012-09-24T14:35:13.443 に答える
0

私が質問を正しく理解していれば、あなたはホテルの部屋の順序を逆にしたいと考えています。そうであれば、これを試すことができます。

Dim hotelList as List(Of Hotel) =  lstHotels.OrderByDescending(Function(hotel) hotel.Rooms(0).roomcharge).ToList()

hotelList.ForEach(AddressOf OrderRooms)


Sub OrderRooms(ByVal hotel As Hotel)
       hotel.Rooms.Reverse()
End Sub 

役立つかもしれません。

于 2012-09-21T07:38:35.203 に答える
0

必要な結果に応じて、次のものが必要になる場合があります.ThenBy

まず、私が使用しているLINQ式は次のとおりです。

From hotel In lstHotels
    From room In hotel.Rooms
    Order By hotel.Room(0).roomcharge Descending,
             room.roomcharge Descending    

LINQpad を使用すると、次のようになります。

lstHotels.SelectMany(Function(hotel) hotel.Rooms, _
            Function(hotel,room) New With{.hotel=hotel, .room=room}) _
     .OrderByDescending(Function(hr) hr.hotel.Rooms(0).roomcharge) _
     .ThenByDescending(Function(hr) hr.room.roomcharge)

AsQueryable(ただし、これはテストされていません。別の SO 回答用に既にコード化されているわずかに異なるデータセットからの出力に基づいています)。

于 2012-09-23T17:49:13.827 に答える