GroupBy:如何处理空组?

时间:2013-08-30 08:03:04

标签: c# linq grouping

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

对象:

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”将包含在结果列表中。 如何按年份对MyObjs进行分组并在结果中保留一个空的“group3”项?

2 个答案:

答案 0 :(得分:1)

奇怪的是,您希望某些群组接受空的群组,但您的查询错误,因为Where已经过滤掉q.DateRealisation == DateTime.MinValue的所有元素,这对您有用:

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

答案 1 :(得分:0)

你会得到一个小组。该群组的密钥为0,因为default(int) == 0

如果不指定类成员变量,则将其设置为默认值。对于null的参考类型,对于0的别名整数/浮点类型,对于用户定义的struct,其值必须填充默认值。