I have an object which has a date and a list of people, a person has a first and last name. Something like:
PeopleInfo
----------
DateTime - StartDate
List<Person> - People
Person
------
string - FirstName
string - LastName
I have a list of people info where there are multiple StartDates the same each with its own list of people. Is it possible to merge these into a single object using linq?
StartDate - 1/1/2011, People Bob, Sue, Jane
StartDate - 2/2/2011, People Scott, Rob, Mark
StartDate - 1/1/2011, People Fred, Gill, Jack
StartDate - 1/1/2011, People Bob, Sue, Jane, Fred, Gill, Jack
StartDate - 2/2/2011, People Scott, Rob, Mark
Is this possible in linq?
Thanks
You could do:
List<PeopleInfo> peopleInfos = ...
var merged = from peopleInfo in peopleInfos
             group peopleInfo by peopleInfo.StartDate into dateGroup
             select new PeopleInfo
             {
                 StartDate = dateGroup.Key,
                 People = dateGroup.SelectMany(pi => pi.People)
                                   .Distinct()
                                   .ToList()
             };
But this really looks like a hack; I would recommend you design the container class in a way that prevents this 'duplicate date' scenario from occurring in the first place. e.g. an implementation of ILookup<DateTime, Person> or IDictionary<DateTime, List<Person>> or a HashSet<PeopleInfo> that uses StartDate for equality.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With