如何将以下声明更改回List<DocumentData>
IEnumerable<IGrouping<string, DocumentData>> documents =
documentCollection.Select(d => d).GroupBy(g => g.FileName);
目标是获得应该小于documentCollection的List。 FileName包含重复项,因此我想确保我没有重复的名称。
我也尝试了以下内容,但它仍然向我提供了重复的文件名
documentCollection =
documentCollection.GroupBy(g => g.FileName).SelectMany(d => d).ToList();
答案 0 :(得分:10)
每个IGrouping<string, DocumentData>
都是IEnumerable<DocumentData>
,因此您只需调用SelectMany
即可展平序列:
var list = documents.SelectMany(d => d).ToList();
编辑:根据更新后的问题,OP似乎只想为任何给定文件名选择第一个文档。这可以通过在每个First()
实例上调用IGrouping<string, DocumentData>
来实现:
IEnumerable<DocumentData> documents =
documentCollection.GroupBy(g => g.FileName, StringComparer.OrdinalIgnoreCase)
.Select(g => g.First())
.ToList();
答案 1 :(得分:3)
你还没有说T
你要找的List<T>
应该代表什么,所以这里有几个最有可能成为的人:
List<DocumentData>
- 相当无意义,因为您已经在documentCollection
上
var results = documents.SelectMany(g => g).ToList();
List<KeyValuePair<string, List<DocumentData>>
var results =
documents.Select(g => new KeyValuePair(g.Key, g.ToList())).ToList();
List<string>
- 只是名称
var results = documents.Select(g => g.Key).ToList();
List<IGrouping<string, DocumentData>>
var results = documents.ToList();