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"项?
奇怪的是,你想要一些组接受甚至是空的组,你的查询是错误的,因为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
,它们的值用默认值填充。