我有一组类别,每个类别都包含一组模型。
我想从这些实例中获取一组模型。
var topModels = Model.Categories.Select(c => c.TopModels ?? Enumerable.Empty<MyModel>());
如果我像上面那样写,它会返回一个集合集合(IEnumberable<IEnumberable<MyModel>>
)。
但我需要像IEnumberable<MyModel>
这样的东西。
我只是不知道如何以简单的方式使他们正确。
答案 0 :(得分:1)
试试这个:
var topModels = Model.Categories.SelectMany(c => c.TopModels);
答案 1 :(得分:1)
使用Select
上的IEnumberable<T>
将返回IEnumberable<T>
。这也适用于你的情况。
由于c
(即T
)包含IEnumberable<MyModel>
(位于名为TopModels
的变量中),因此Select
返回{{1这是IEnumerable<T>
请改为IEnumerable<IEnumerable<MyModel>>
。它用于“平坦化”#34;您的SelectMany
到IEnumerable<IEnumberable<T>>
。也就是说,使用IEnumerable<T>
上的SelectMany
将返回IEnumberable<IEnumberable<T>>
类似的东西:
IEnumberable<T>
检查this。
答案 2 :(得分:1)
您应该使用SelectMany方法代替Select,也称为FlatMap
var topModels = Model.Categories.SelectMany(c => c.TopModels);
将序列的每个元素投影到
IEnumerable<T>
,并将生成的序列展平为一个序列。
https://msdn.microsoft.com/en-us/library/bb534336(v=vs.110).aspx