繁体   English   中英

所有强类型属性(甚至是未分配的属性)上的分组列表组

[英]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; }
    }

如果您发现您当前的代码完全在分组我会感到惊讶。 当前的分组键类型是一个不会覆盖EqualsGetHashCode ,这意味着您基本上将获得引用相等。 GroupProperties每个实例GroupProperties等于其他每个实例,并且当您为每个Message创建一个新实例时,将不会进行分组。

您需要适当地覆盖这些方法(理想情况下实现IEquatable<GroupProperties> ),然后进行分组。 只要您的键提取功能始终设置一致的属性集,就不必关心已设置的属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM