Da Sie in den Kommentaren erwähnt haben, dass Sie die Vereinigung der beiden Listen wünschen, können Sie eine LINQ durchführen Union
. Es gibt einige Möglichkeiten, dies zu tun:
Benutzen IEnumerable<T>.Union(IEnumerable<T>)
Wenn Sie mit der einfacheren Überlast gehen Union
, müssen Sie implementieren IEquatable<T>
und außer Kraft setzt GetHashCode
auf Person
.
Zur Vereinfachung betrachtet mein Beispiel nur die Value-Eigenschaft:
public class Person : IEquatable<Person>
{
public int prodId { get; set; }
public string Value { get; set; }
public int domainId { get; set; }
public string Name { get; set; }
public override bool Equals(object obj)
{
return Equals(obj as Person);
}
public override int GetHashCode()
{
return Value == null ? 0 : Value.GetHashCode();
}
public bool Equals(Person other)
{
return other != null
&& other.Value == Value;
}
}
Verwendungsbeispiel:
static void Main(string[] args)
{
var list1 = new List<Person>
{
new Person {Value = "bob"},
new Person {Value = "alice"},
};
var list2 = new List<Person>
{
new Person {Value = "bob"},
new Person {Value = "charles"},
};
var unionedList = list1.Union(list2).ToList();
}
Benutzen IEnumerable<T>.Union(IEnumerable<T>, IEqualityComparer<T>)
Wenn Sie sich für diese Option entscheiden, können Sie den Gleichheitsvergleicher von @ Heslacher als Parameter für den Union
Aufruf verwenden.
static void Main(string[] args)
{
var list1 = new List<Person>
{
new Person {Value = "bob"},
new Person {Value = "alice"},
};
var list2 = new List<Person>
{
new Person {Value = "bob"},
new Person {Value = "charles"},
};
var unionedList = list1.Union(list2, new PersonValueComaparer()).ToList();
}
Bestellangelegenheiten
Da Sie secondList
in Konflikten gewinnen möchten, würden Sie verwenden secondList.Union(initialList)
, sodass alle Übereinstimmungen auf die Objekte in verschoben werden secondList
.