Select() 和 SelectMany() 的工做都是依據源值生成一個或多個結果值。
Select() 爲每一個源值生成一個結果值。所以,整體結果是一個與源集合具備相同元素數目的集合。與之相反,SelectMany() 將生成單一整體結果,其中包含來自每一個源值的串聯子集合。做爲參數傳遞到 SelectMany() 的轉換函數必須爲每一個源值返回一個可枚舉值序列。而後,SelectMany() 將串聯這些可枚舉序列以建立一個大的序列。app
private class NamedEntity { public NamedEntity(int id, string name) { this.ID = id; this.Name = name; } public int ID { get; set; } public string Name { get; set; } } public Window() { InitializeComponent(); NamedEntity[] list1 = { new NamedEntity(1, "Albert"), new NamedEntity(2, "Burke"), new NamedEntity(3, "Connor") }; NamedEntity[] list2 = { new NamedEntity(2, "Albert was here"), new NamedEntity(3, "Burke slept late"), new NamedEntity(4, "Happy") }; IList<NamedEntity[]> l = new List<NamedEntity[]>() { list1, list2 }; IList<NamedEntity> tokens = l.SelectMany(a => a).ToList(); var grp = tokens.GroupBy(a => a.ID); IList<NamedEntity> result = grp.SelectMany(a => a.Take(1)).ToList(); }