Korzystanie z GroupBy()
i Count() > 1
Próbuję znaleźć zduplikowane wystąpienia mojej klasy na liście.GroupBy na złożonym obiekcie (np. Lista <T>)
Klasa wygląda następująco:
public class SampleObject
{
public string Id;
public IEnumerable<string> Events;
}
I to jest jak ja instancji i grupowej listy:
public class Program
{
private static void Main(string[] args)
{
var items = new List<SampleObject>()
{
new SampleObject() { Id = "Id", Events = new List<string>() { "ExampleEvent" } },
new SampleObject() { Id = "Id", Events = new List<string>() { "ExampleEvent" } }
};
var duplicates = items.GroupBy(x => new { Token = x.Id, x.Events })
.Where(g => g.Count() > 1)
.Select(g => g.Key)
.ToList();
}
}
duplicates
zawiera żadnych elementów. Jak mogę utworzyć pracę grupową?
Domyślnie listy nie są porównywane wartości ich pozycji. –
@SergeyBerezovskiy - Co nie jest problemem tutaj. Problemem jest brak nadpisań 'GetHashCode' i' Equals'. – Enigmativity
@Enigmativity 'new {Token = x.Id, x.Events}' nie ma nic, aby przesłonić Equals i GetHashCode z 'SampleObject'. Problem tutaj jest całkowicie spowodowany przez porównanie "x.Events" –