C# LINQ 使用 DISTINCT 计数元素

Posted

技术标签:

【中文标题】C# LINQ 使用 DISTINCT 计数元素【英文标题】:C# LINQ counting elements with DISTINCT 【发布时间】:2013-07-13 04:52:23 【问题描述】:

我有一个 KeyValuePair 项的集合,其中 DateTime 为键,字符串为值。 基本上我的数据看起来像:

12/07/2013 - 10220
12/07/2013 - 10220
12/07/2013 - 12220
12/07/2013 - 11240
12/07/2013 - 15220
13/07/2013 - 23220
13/07/2013 - 35620
14/07/2013 - 15620
14/07/2013 - 15620

我想要一份我每天有多少物品(不同)的清单。所以查询将导致:

12/07/2013 - 4
13/07/2013 - 2
14/07/2013 - 1

【问题讨论】:

【参考方案1】:

以下是完整示例的解决方案

        var list = new[]
        
            new Date = new DateTime(2013,07,12), value = 10220,
            new Date = new DateTime(2013,07,12), value = 10220,
            new Date = new DateTime(2013,07,12), value = 12220,
            new Date = new DateTime(2013,07,12), value = 11240,
            new Date = new DateTime(2013,07,12), value = 15220,
            new Date = new DateTime(2013,07,13), value = 23220,
            new Date = new DateTime(2013,07,13), value = 35620,
            new Date = new DateTime(2013,07,14), value = 15620,
            new Date = new DateTime(2013,07,14), value = 15620,
        ;


        var res = from l in list group l by new  l.Date  into g select new  g.Key.Date, value = g.Distinct().Count() ;

        foreach (var item in res)
        
            Console.WriteLine(item.Date + " " + item.value);
        

【讨论】:

【参考方案2】:

使用group by

var dateGrouped = dates.GroupBy(x => x.Key)
                       .Select(x => new  Date = x.Key, Values = x.Distinct().Count() );

【讨论】:

以上是关于C# LINQ 使用 DISTINCT 计数元素的主要内容,如果未能解决你的问题,请参考以下文章

c# linq Distinct 过滤重复项怎么做啊

C# Linq 交集并集差集去重

Linq 计数错误(列)

c#在遍历列表时删除元素-向后迭代或使用i--或使用linq同时迭代和删除?

如何使用 Linq 获取列中每个不同值的计数

LINQ C# 中的条件计数分组依据