1

我有一个列表,我想根据对象的属性对其进行分组。但是,当我输出分组列表时,它似乎对对象中的每个属性进行分组,即使我没有为它们分配任何值。由于未分配值的默认值应该相同,因此它们应该组合在一起,对吗?

new { x.SentDate.Year }我知道我可以通过使用匿名类型(

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; }
    }
4

1 回答 1

1

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

您需要适当地覆盖这些方法(理想情况下实现IEquatable<GroupProperties>),然后分组将起作用。您不需要关心设置了哪些属性,只要您的密钥提取功能始终设置一组一致的属性即可。

于 2012-09-19T17:01:47.813 回答