平展 LINQ 子选择,使 1.n 变为一行

本文关键字:一行 LINQ 选择 平展 | 更新日期: 2023-09-27 18:34:47

我有一个订单,其中包含链接到车站设置的电台列表:

public class Order
{
    public int Id { get; set; }
    public string Name { get; set; }
    ..
    ..
    public List<OrderStation> OrderStations { get; set; }
}
public class OrderStation
{
    public int Id { get; set; }
    public int Status { get; set; }
    ..
    ..
    public Order Order { get; set; }
    public Station Station { get; set; }
}  
public class Station
{
    public int Id { get; set; }
    public int DisplayOrder { get; set; }
    ..
    ..
}

订单>订单站<站>

一个订单可以有任意数量的订单站(所有订单的订购站数量相同(。订购站应由站的显示顺序排序。

我试图得到的是:

o.Name, os[0].Status, os[..].Status, os[16].Status
其中 OrderStation

按 OrderStation.Station.DisplayOrder 排序

我不习惯 LINQ,并且完全陷入了尝试像这样扁平化子选择的困境!

平展 LINQ 子选择,使 1.n 变为一行

使用 Enumerable.OrderBy .如果集合"可以是任意数量的OrderStations",则不应为每个Status使用匿名类型中的固定属性。请改用作为有序集合的属性:

var q = new
{
    order.Name,
    OrderedStatuses = order.OrderStations
        .OrderBy(os => os.Station.DisplayOrder)
        .ToList()
};