Vb.net 使用linq反转对象列表中的对象列表
我有一份等级酒店的名单,里面有其他等级房间的名单。现在,当我执行降序排序时,我会按降序对酒店进行排序,但我还必须使用linq对价格上的房间列表进行内部排序。下面是班级结构示意图Vb.net 使用linq反转对象列表中的对象列表,vb.net,asp.net-mvc-3,linq,linq-to-objects,Vb.net,Asp.net Mvc 3,Linq,Linq To Objects,我有一份等级酒店的名单,里面有其他等级房间的名单。现在,当我执行降序排序时,我会按降序对酒店进行排序,但我还必须使用linq对价格上的房间列表进行内部排序。下面是班级结构示意图 class Hotel - property hotelname (string) - property rooms (list of rooms) class rooms - property roomdesc (string) - property roomch
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个索引房间总是成本最低的。同样使用降序排序,我还想对房间列表进行排序
提前谢谢。如果我理解正确,你想颠倒酒店房间的顺序,如果是这样,你可以试试这个
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
可能会有帮助。根据您想要的结果,您可能只需要
首先,这里是我使用的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)
(但这是未经测试的——它基于已为另一个SO答案编码的稍有不同的数据集的AsQueryable
输出)。假设您有以下类:
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; }
}
这样,您就可以枚举匿名类型,其中第一个成员是酒店的名称,第二个成员是按您想要的方式排序的房间的枚举。您可能希望在投影中以hotel=o
替换o.Name
来显示整个hotel实例,如您所愿。您没有明确说明问题。你的代码是否有效?你还谈到在你的标题中颠倒一个列表,但你只谈到在你的问题中排列一个列表。C#答案也受欢迎吗?我对vb.net了解不够,无法表达这一点。以下是要求。。。我需要按降序对酒店以及这些酒店下的房间进行排序。。如下图所示。酒店ABC第一次报价含2间客房:125150第二次报价含2间客房:175200酒店XYZ第一次报价含2间客房:120140第二次报价含2间客房:210220现在,一旦我在desc中对这些报价进行排序,酒店XYZ将显示为第一家酒店,并且我想对该报价中的房间进行排序。我可以按报价排序,但不能按房间排序@黄蜂:欢迎回答。。
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
};