想象一下,您拥有Voyage
类的Tally
类。这个Tally
类具有Shipment
类的集合。我正在尝试获取所有Tallies类的列表作为工会发货清单。
我已经对此进行了编码:
var shipments = booking.Voyages.Select(q => q.Tallies.Select(t => t.Loadings.Select(l=>l.Shipment))).ToList();
但是问题是它以List<IEnumerable<IEnumerable<Shipment>>>
的形式返回结果,而我期望以IEnumerable<Shipment>
的形式出现。
有没有解决此问题的方法,或者我必须使用for
循环来获取其发货。
答案 0 :(得分:1)
您需要SelectMany
函数。 SelectMany
会将嵌套的IEnumerable<IEnumerable<T>>;
展平为所有孩子中的IEnumerable<T>
。因为您处于多个级别,所以您将需要多个SelectMany
。
var shipments = booking.Voyages.SelectMany(
q => q.Tallies.SelectMany(
t => t.Loadings.SelectMany(l=>l.Shipment)
)
).ToList();
如果Shipment
属性是单个对象导航属性,而不是集合,则需要以下代码。
var shipments = booking.Voyages.SelectMany(
q => q.Tallies.SelectMany(
t => t.Loadings.Select(l=>l.Shipment)
)
).ToList();