使用Linq获取列表中的列表

时间:2013-10-24 09:36:16

标签: c# linq

我需要使用linq(lambda)返回列表中的列表,但是仍然没有获得必需的语法。

我有一个WikiMeta列表,我想查询并将所有WikiGroups作为新列表返回。

注意:某些属性已从清晰度中移除。

List<WikiMeta> Meta;

public class WikiMeta
{
    public List<WikiGroup> Groups = new List<WikiGroup>();
}

public class WikiGroup
{
    public string Name { get; set; }
}

1 个答案:

答案 0 :(得分:5)

您可以使用SelectMany

将它们全部作为平面列表
var groups = meta.SelectMany(m => m.Groups).ToList();

这会给你一个List<WikiGroup>

Documentation for SelectMany.

您可以在主List<WikiMeta>上执行您希望的任何查询:

var filteredGroups = meta
    .Where(m => m.IsActive) // Fictional "IsActive" boolean property.
    .SelectMany(m => m.Groups)
    .ToList();

使用这种流畅的功能方法来查询集合,您可以开始构建更复杂的查询。

如果您希望将查询延迟到迭代,请删除ToList,这将为您提供IEnumerable<WikiGroup>