[英]Linq IEnumerable<IGrouping<string, Class>> back to List<Class>
如何将以下语句转回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();
每个IGrouping<string, DocumentData>
都是IEnumerable<DocumentData>
,因此您可以简单地调用SelectMany
来展平序列:
var list = documents.SelectMany(d => d).ToList();
编辑 :根据更新的问题,似乎OP想要为任何给定的文件名选择第一个文档。 这可以通过在每个IGrouping<string, DocumentData>
实例上调用First()
来实现:
IEnumerable<DocumentData> documents =
documentCollection.GroupBy(g => g.FileName, StringComparer.OrdinalIgnoreCase)
.Select(g => g.First())
.ToList();
你还没有在你正在寻找的List<T>
说过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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.