使用LINQ来合并一个包含多个列表的属性?

6

我有一个看起来像这样的字典:Dictionary<Search_Requests, List<Tuple<Search_Subjects, SearchData>>>

SearchData类中,有一个叫做SearchCode的属性。我想要做的是获取出现在这个字典中的每一个搜索代码的数组。我可以用几个循环来做到这一点,但我更喜欢使用LINQ。不幸的是,我无法理解如何做到这一点。我尝试了

RequestDictionary.Select(s => s.Value.Select(z => s.Value.Select(x => x.Item2.SearchCode).ToArray()).ToArray()).ToArray();

但是这仅仅给我一个string [][][],离我想要的还有很大的差距。我能得到正确的指导吗?


1
查看SelectMany() - http://msdn.microsoft.com/zh-cn/library/system.linq.enumerable.selectmany%28v=vs.110%29.aspx - itsme86
如果我理解正确的话,我只需要将我的外部选择器更改为“SelectMany”,就可以了。 - cost
2个回答

6
您可以使用.SelectMany()来将结果展开:
RequestDictionary
    .SelectMany(s 
        => s.Value.SelectMany(z => s.Value.Select(x => x.Item2.SearchCode))
    .ToArray();

0
窍门在于将 .Select().SelectMany() 结合起来使用:
var codes = requestDictionary
               //Extract all List<>s from the dictionary and enumerate them back-to-back:
               .SelectMany(entry => entry.Value)
               //Extract the SearchCode from each list item:
               .Select(tuple => tuple.Item2.SearchCode)
               .ToArray();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接