我如何将以下语句转回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希望为任何给定的文件名仅选择第一个文档。这可以通过在每个First()实例上调用IGrouping<string, DocumentData>来实现:
IEnumerable<DocumentData> documents =
    documentCollection.GroupBy(g => g.FileName, StringComparer.OrdinalIgnoreCase)
                      .Select(g => g.First())
                      .ToList();

关于c# - Linq IEnumerable <IGrouping <字符串,类>>返回到列表<类>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21010424/

10-10 07:49