繁体   English   中英

Linq IEnumerable <IGrouping<string, Class> &gt;返回列表 <Class>

[英]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应该代表什么,所以这里有几个最可能需要的东西:

  1. List<DocumentData> - 因为你已经在documentCollection上拥有它,所以毫无意义

     var results = documents.SelectMany(g => g).ToList(); 
  2. List<KeyValuePair<string, List<DocumentData>>

     var results = documents.Select(g => new KeyValuePair(g.Key, g.ToList())).ToList(); 
  3. List<string> - 只是名称

     var results = documents.Select(g => g.Key).ToList(); 
  4. List<IGrouping<string, DocumentData>>

     var results = documents.ToList(); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM