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