Игрупинг не находит правильный ключ для пользовательского класса
У меня есть собственный класс, который содержит 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?