我正在尝试从自定义对象列表中对元素进行分组。
对象:
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”项?
答案 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
,其值必须填充默认值。