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

时间:2016-02-15 10:51:04

标签: c# linq

我订购了一个与车站设置相关联的车站列表:

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; }
    ..
    ..
}

命令中─&GT; OrderStations&LT; -Station

订单可以有任意数量的OrderStations(所有订单的OrderStations数量相同)。 OrderStations应该由Station的DisplayOrder订购。

我试图回来的是:

o.Name, os[0].Status, os[..].Status, os[16].Status

OrderStation按OrderStation.Station.DisplayOrder

排序

我不习惯LINQ而且完全没有尝试像这样压扁子选择!

1 个答案:

答案 0 :(得分:0)

使用Enumerable.OrderBy。如果集合“可以是任意数量的OrderStations”,则不应在每个Status的匿名类型中使用固定属性。而是使用属于有序集合的属性:

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