GroupBy:如何处理空组

本文关键字:处理 何处理 GroupBy | 更新日期: 2023-09-27 18:29:33

我正在尝试从自定义对象列表中对元素进行分组。

对象:

Public class MyObj
{
    public string groupName{ get; set; }
    public int year{ get; set; }
    public MyObj(string groupName)
    {
        this.GroupName = groupName;
    }    
    public MyObj(string groupName, int year)
    {
        this.GroupName = groupName;
        this.Year = year;
    }
}

列表:

List<MyObj> list = new List<MyObj>();
list.Add(new MyObj("group1", 2012));
list.Add(new MyObj("group1", 2013));
list.Add(new MyObj("group2", 2012));
list.Add(new MyObj("group2", 2013));
list.Add(new MyObj("group3"));
list.Add(new MyObj("group3"));

如果我做了这样的事情:

IEnumerable<IGrouping<string, MyObj>> listMyObj = list.GroupBy(o => o.Year);

"group3"将不包括在结果列表中。如何按年份对MyObj进行分组,并在结果中保留一个空的"group3"项?

GroupBy:如何处理空组

奇怪的是,你想要一些组接受甚至是空的组,你的查询是错误的,因为Where已经用q.DateRealisation == DateTime.MinValue过滤掉了所有元素,这对你来说是有效的:

var qualifs2 = lstQualifs.GroupBy(q => q.Contrat)
                         .Select(g=>g.Where(q => q.DateRealisation != DateTime.MinValue))
                         .SelectMany(g=>g);

您将获得一个组。组的密钥将是0,因为default(int) == 0

如果不分配类成员变量,则会将其设置为默认值。对于null的引用类型,对于0的混叠积分/浮点类型,以及用户定义的struct,它们的值用默认值填充。