如何获取List <objects> </objects>中不同对象的计数

时间:2014-07-24 14:22:02

标签: c# asp.net list class

我有一个类对象的C#列表:

{
  { id=1, date=04-07-2014 }
  { id=1, date=05-07-2015 }
  { id=2, date=05-05-2014 }
  { id=3, date=12-06-2014 }
  { id=4, date=12-07-2014 }
  { id=2, date=11-07-2014 }
} 

如何查找列表中属于7月份的每个不同的ID的计数。日期存储为&#39; dd-MM-yyyy&#39;。

1 个答案:

答案 0 :(得分:2)

您需要先使用date.Month对您的记录进行分组,然后根据Ids对每个组进行分组,然后在字典中选择每个Id及其计数:

var query = list.GroupBy(r => r.date.Month)
            .Select(grp => new
                {
                    Month = grp.Key,
                    IdsCount = grp.GroupBy(r => r.id)
                                    .ToDictionary(subGroup => subGroup.Key, 
                                                  subGroup => subGroup.Count()),
                });

如果您的日期是字符串格式"yyyy-dd-MMTHH:mm:ss",则分组如下:

list.GroupBy(r => DateTime.ParseExact(r.date, "yyyy-dd-MMTHH:mm:ss", CultureInfo.InvariantCulture).Month)

编辑:

要获取这些值:

foreach (var month in query)
{
    Console.WriteLine("For the month of: {0}", CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(month.Month));
    foreach (var id in month.IdsCount)
    {
        Console.WriteLine("ID: {0} , Count: {1}", id.Key, id.Value);
    }
}