在LINQ中按月和年的多个日期属性分组 [英] Groupby multiple date properties by month and year in LINQ

查看:132
本文介绍了在LINQ中按月和年的多个日期属性分组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要在 C# LINQ

这是我的代码:

public class Class1
{
    public Nullable<DateTime> dt1 { get; set; }
    public Nullable<DateTime> dt2 { get; set; }
}

Class1 obj1 = new Class1 { dt1 = new DateTime(2012, 11, 12),
                           dt2 = new DateTime(2012, 12, 12) };
Class1 obj2 = new Class1 { dt1 = new DateTime(2012, 11, 12),
                           dt2 = new DateTime(2012, 12, 12) };
Class1 obj3 = new Class1 { dt1 = null, dt2 = new DateTime(2012, 10, 12) };
Class1 obj4 = new Class1 { dt1 = new DateTime(2012, 10, 12), dt2 = null };
Class1 obj5 = new Class1 { dt1 = null, dt2 = new DateTime(2012, 11, 12) };
Class1 obj6 = new Class1 { dt1 = new DateTime(2013, 10, 12), dt2 = null };

List<Class1> listGoogleTimezone = new List<Class1>
{
    obj1,
    obj2,
    obj3,
    obj4,
    obj5,
    obj6
};

我需要的结果就是这样

MONTH YEAR   COUNT





OCT   2012   2
NOV   2012   3
DEC   2012   2

帮助我出去

推荐答案

您需要使用 SelectMany (in这个特殊情况过滤掉 null 值),然后执行典型的 GroupBy / 计数投影:

You need to collect all the dates using SelectMany (in this particular case filter out the null values) and then do the typical GroupBy / Count projection:

var result = listGoogleTimezone
    .SelectMany(x => new[] { x.dt1, x.dt2 }.Where(dt => dt != null).Select(dt => dt.Value))
    .GroupBy(dt => new { dt.Month, dt.Year })
    .OrderBy(g => g.Key.Year).ThenBy(g => g.Key.Month) // optional
    .Select(g => new
    {
        g.Key.Month,
        g.Key.Year,
        Count = g.Count()
    }).ToList();

这篇关于在LINQ中按月和年的多个日期属性分组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆