Игрупинг не находит правильный ключ для пользовательского класса

У меня есть собственный класс, который содержит 3 поля:

public class Selector
{
    public long? SubTypeID {get;set;}
    public int TypeID { get; set; }
    public DateTime? ActionDate { get; set; }
}

IEnumerable<IGrouping<Selector, Log>> query = src.GroupBy(td => new Selector() 
    {SubTypeID = td.SubTypeID, ActionDate = td.ActionDate, TypeID = td.ActivityTypeID}, 
    td => td);

Когда у меня есть два журнала, которые содержат ActionDate = '9 сентября 2013' и SubTypeID = 3 и TypeID = 1, есть идеи, почему он не может сгруппировать два журнала? Нужно ли реализовать пользовательское сравнение? Чего здесь на самом деле не хватает?

Спасибо!

1 ответ

Решение

Вы должны переопределить Equals а также GetHashCode методы в вашем Selector учебный класс. В противном случае выполняется стандартное сравнение ссылок, и поэтому ваши элементы не группируются вместе.

Вы также должны прочитать Почему важно переопределить GetHashCode, если переопределен метод Equals?

Другие вопросы по тегам