[英]Grouped list groups on all strongly typed properties, even unassigned ones
我有一个列表,希望根据对象的属性进行分组。 但是似乎当我输出分组列表时,即使我没有为它们分配任何值,它也会在对象的每个属性上进行分组。 由于默认值与未分配值应该相同,因此应该将它们分组在一起,对吗?
我知道我可以通过使用匿名类型( new { x.SentDate.Year }
)和其他东西来解决此问题,但这样做的目的是将GroupBy函数作为参数传递给PopulateMessages方法,以提高动态性。
public void PopulateMessages()
{
List<Message> Messages = new DataRepository().GetMessages();
Func<Message, GroupProperties> func = x => new GroupProperties
{
Year = x.SentDate.Year
};
IEnumerable<IGrouping<GroupProperties, Message>> GroupedMessages = Messages.OrderByDescending( x => x.SentDate )
.GroupBy( func )
.ToList();
}
public class GroupProperties
{
public int Year { get; set; }
public int Month { get; set; }
public int Day { get; set; }
}
如果您发现您当前的代码完全在分组,我会感到惊讶。 当前的分组键类型是一个不会覆盖Equals
或GetHashCode
,这意味着您基本上将获得引用相等。 GroupProperties
每个实例GroupProperties
等于其他每个实例,并且当您为每个Message
创建一个新实例时,将不会进行分组。
您需要适当地覆盖这些方法(理想情况下实现IEquatable<GroupProperties>
),然后进行分组。 只要您的键提取功能始终设置一致的属性集,就不必关心已设置的属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.