Home > Backend Development > C++ > How Can I Merge Two Lists of Person Objects Using LINQ, Handling Duplicates by Combining Values and Calculating Change?

How Can I Merge Two Lists of Person Objects Using LINQ, Handling Duplicates by Combining Values and Calculating Change?

Mary-Kate Olsen
Release: 2025-01-01 06:54:11
Original
612 people have browsed it

How Can I Merge Two Lists of Person Objects Using LINQ, Handling Duplicates by Combining Values and Calculating Change?

Merging Two Object Lists Using LINQ

In scenarios like managing data, you may encounter situations where you need to combine multiple object lists. Let's consider a specific instance where we have two lists of Person objects:

<br>class Person<br>{</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">string Name;
int Value;
int Change;
Copy after login

}

List list1;
List list2;

Our goal is to merge these two lists into a new List. When the same person exists in both lists, we need to combine their values while calculating the change by subtracting the value in list1 from the value in list2. For non-duplicate persons, the change should be zero.

Using the Linq Union Method

One simple approach to merge these lists is by using the Linq extension method Union. This method combines the elements of two sequences and returns a new sequence. For example:

<br>var mergedList = list1.Union(list2).ToList();<br>

By default, the Union method uses the Equals and GetHashCode methods of the Person class to determine duplicate elements. However, if you want to compare persons based on a specific property, such as their Name, you can override these methods in the Person class.

/// <summary>
/// Checks if the provided object is equal to the current Person
/// </summary>
/// <param name="obj">Object to compare to the current Person</param>
/// <returns>True if equal, false if not</returns>
public override bool Equals(object obj)
{
    // Try to cast the object to compare to to be a Person
    var person = obj as Person;

    return Equals(person);
}

/// <summary>
/// Returns an identifier for this instance
/// </summary>
public override int GetHashCode()
{
    return Name.GetHashCode();
}

/// <summary>
/// Checks if the provided Person is equal to the current Person
/// </summary>
/// <param name="personToCompareTo">Person to compare to the current person</param>
/// <returns>True if equal, false if not</returns>
public bool Equals(Person personToCompareTo)
{
    // Check if person is being compared to a non person. In that case always return false.
    if (personToCompareTo == null) return false;

    // If the person to compare to does not have a Name assigned yet, we can't define if it's the same. Return false.
    if (string.IsNullOrEmpty(personToCompareTo.Name) return false;

    // Check if both person objects contain the same Name. In that case they're assumed equal.
    return Name.Equals(personToCompareTo.Name);
}
Copy after login

Alternatively, you can create a comparer class that implements the IEqualityComparer interface to define your own comparison criteria. You can then specify this comparer as the second parameter in the Union method.

The above is the detailed content of How Can I Merge Two Lists of Person Objects Using LINQ, Handling Duplicates by Combining Values and Calculating Change?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template