平展 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,并且完全陷入了尝试像这样扁平化子选择的困境!
使用 Enumerable.OrderBy
.如果集合"可以是任意数量的OrderStations
",则不应为每个Status
使用匿名类型中的固定属性。请改用作为有序集合的属性:
var q = new
{
order.Name,
OrderedStatuses = order.OrderStations
.OrderBy(os => os.Station.DisplayOrder)
.ToList()
};