Próbuję scalić dwie listy przy użyciu list.Union
w LinqPad
, ale nie mogę uruchomić go i chciałem sprawdzić, czy moje zrozumienie jest poprawne.Usuwanie duplikatów podczas scalania list za pomocą Unii w LINQ
Biorąc pod uwagę to prosta klasa:
public class Test
{
public int Id { get; set;}
public int field1 { get; set; }
public bool Equals(Test other)
{
return this.Id.Equals(other.Id);
}
}
I dwie listy wypełniana tak:
List<Test> list = new List<Test>();
list.Add(new Test { Id = 1, field1 = 1});
list.Add(new Test { Id = 1, field1 = 2});
list.Add(new Test { Id = 2, field1 = 3});
list.Add(new Test { Id = 2, field1 = 4});
List<Test> list2 = new List<Test>();
list2.Add(new Test { Id = 1, field1 = 1});
list2.Add(new Test { Id = 1, field1 = 2});
list2.Add(new Test { Id = 2, field1 = 3});
list2.Add(new Test { Id = 2, field1 = 4});
I spróbuj: var mergedList = list.Union(list2).ToList();
i wyjściowe dane za pomocą prostego foreach
pętlę i uzyskać ten wynik:
ID: 1 -------- 1
ID: 1 -------- 2
ID: 2 -------- 3
ID: 2 -------- 4
ID: 1 -------- 1
ID: 1 -------- 2
ID: 2 -------- 3
ID: 2 -------- 4
Byłem pod wrażeniem, że Union
należy usunąć duplikaty powrotu:
ID: 1 -------- 1
ID: 1 -------- 2
ID: 2 -------- 3
ID: 2 -------- 4
robię coś źle albo ja źle?
Czy powinien on działać bez jawnego przesłonięcia metody Equals
w klasie Test
?
Dzięki
powinieneś przeczytać tę stronę [dokumentacja] (http://msdn.microsoft.com/en-us/library/system.object.gethashcode. aspx). – Jon
@ Jon. Będę. Dziękuję Ci. – davy