I tried to use GroupBy not with anonymous type but with concrete class as a key. I overrided Equals method. It didn't help. I saw the issues about using concrete types as a key, but there wasn't said about any troubles using it.
The debug session results are in attached image
class Program
{
static void Main(string[] args)
{
DateTime val = DateTime.Now;
bool testEquality = new Class2(val) == new Class2(val);
bool testEquality2 = new Class2(val).Equals(new Class2(val));
bool testEquality3 = new Class2(val).Equals(new Class2(val.AddDays(1)));
List<Class1> list = new List<Class1>
{
new Class1(1, val),
new Class1(2, val.AddHours(1)),
new Class1(2, val.AddHours(2)),
new Class1(2, val.AddHours(1)),
new Class1(2, val.AddHours(1)),
};
var grouped = list.GroupBy(x => new Class2(x.prop2));
}
}
internal class Class1
{
public int prop1;
public DateTime prop2;
public Class1(int v1, DateTime v2)
{
prop1 = v1;
prop2 = v2;
}
}
internal class Class2
{
public DateTime prop2;
public Class2(DateTime v)
{
prop2 = v;
}
public override bool Equals(object obj)
{
return this.prop2 == ((Class2)obj).prop2;
}
}