首页 > 解决方案 > Linq 从多个 where 条件中获取计数

问题描述

我想要一些非常简单的东西,我想从记录列表中找到特定日期的记录(记录可以多次具有相同的日期)并具有特定值,

并计算这些值中有多少存在。到目前为止,我正在使用它,但我不确定它是否是最好的方法

这里是记录

    public class Records
    {
        public DateTime Date { get; set; }
        public int Record { get; set; }

    }

这是代码

 List<Records> records = GetRecords();
 var distinctDates = records.Select(x => x.Date).Distinct().ToList();


 for (int i = 0; i < distinctDates.Count(); i++)
 { 
     statistics.Rows.Add(new object[] { distinctDates[i].ToString("MM/dd/yyyy HH:mm"),
     records.Select(x => x).Where(d => d.Date == distinctDates[i]).Count(x => x.Record == -1).ToString()});
 }

我想知道特定日期的出现和记录中特定值的总和所以如果数据库有这些值:

1980 年 11 月 11 日,3

1980 年 11 月 11 日,3

1980 年 12 月 11 日,2

当我将寻求条件 11/11/1980 和 3 的计数时,我想得到结果 2

标签: c#linq

解决方案


var result = records.GroupBy(x => x.Date)
                    .Select(x => new { Date = x.Key, Count = x.Count() });

是你想要的

结果现在将有一个日期和计数列表。

如果你想要一个特定的值,那么像这样:

var result = records.Where(x => x.Record == -1).
                    .GroupBy(x => x.Date)
                    .Select(x => new { Date = x.Key, Count = x.Count() });

要按日期而不是日期时间分组,请使用 GroupBy 语句中对象的日期属性

                    .GroupBy(x => x.Date.Date)

推荐阅读