使用LINQ组合列表列表中的属性?

时间:2014-02-18 22:37:42

标签: c# linq

我有一个类似的词典: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[][][],这与我想要的并不相符。我可以向正确的方向努力吗?

2 个答案:

答案 0 :(得分:6)

您可以使用.SelectMany()展平结果:

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

答案 1 :(得分: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();