在LINQ或Lambda Expression中获取组中单个对象的集合

时间:2016-01-05 01:33:01

标签: c# linq lambda

我有一组类别,每个类别都包含一组模型。

我想从这些实例中获取一组模型。

var topModels = Model.Categories.Select(c => c.TopModels ?? Enumerable.Empty<MyModel>());

如果我像上面那样写,它会返回一个集合集合(IEnumberable<IEnumberable<MyModel>>)。 但我需要像IEnumberable<MyModel>这样的东西。

我只是不知道如何以简单的方式使他们正确。

3 个答案:

答案 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;您的SelectManyIEnumerable<IEnumberable<T>>。也就是说,使用IEnumerable<T>上的SelectMany将返回IEnumberable<IEnumberable<T>>

类似的东西:

IEnumberable<T>

检查this

答案 2 :(得分:1)

您应该使用SelectMany方法代替Select,也称为FlatMap

var topModels = Model.Categories.SelectMany(c => c.TopModels);

的SelectMany

  

将序列的每个元素投影到IEnumerable<T>,并将生成的序列展平为一个序列。

https://msdn.microsoft.com/en-us/library/bb534336(v=vs.110).aspx