如何使用 LINQ Group Records 和使用 Distinct

How to use LINQ Group Records and use Distinct

鉴于此记录

class Record
{
    DateTime Date {get; set;}
    string Article {get; set;}
    string Platform { get; set;}
    string Amount { get; set;}
}

通过 sql 查询,我得到了一个记录列表,并希望按文章对平台进行分组。

我做这个查询:

List<Record> recordList = FetchRecords();
var group = recordList.GroupBy(
    f => f.Article, 
    (key, g) => new 
    { 
        Article= key, 
        Platforms = g.Select(p => p.Platform).ToList() 
    });

大约有 120 种不同的文章和大约 30 个不同的平台,因此组中的预期物品数量约为 120,但我收到了数千件物品。记录列表中的项目很多,因为它是过去 30 天内所有文章的库存,所以我想获得一个独特的文章列表。我只是想不出在哪里做这个。我错过了什么?

编辑:

在运行时进一步检查数据后,我发现我的数据倒退了。文章已经正确分组,平台是需要区分的平台,就像 Astrid E 在评论中猜测的那样

也许你可以尝试这样的事情:

var group = recordList.GroupBy(r => r.Article)
                      .Select(a =>
                        new
                        {
                            Article = a.Key,
                            Platforms = a.GroupBy(g => g.Platform)
                        });

您可以 return Platform 集合的不同值,方法是使用 Enumerable.Distinct()

.GroupBy() 操作中结果选择器中的 Platforms 值应按如下方式计算:

Platforms = g.Select(p => p.Platform).Distinct().ToList()