Linq - 将来自不同对象的子列表合并为单个对象

lan*_*der 7 c# linq

我有一个对象,它有一个日期和人员列表,一个人有名字和姓氏.就像是:

PeopleInfo
----------
DateTime - StartDate
List<Person> - People

Person
------
string - FirstName
string - LastName
Run Code Online (Sandbox Code Playgroud)

我有一个人员信息列表,其中有多个StartDates相同的人员列表.是否可以使用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
Run Code Online (Sandbox Code Playgroud)

预期产出

StartDate - 1/1/2011, People Bob, Sue, Jane, Fred, Gill, Jack
StartDate - 2/2/2011, People Scott, Rob, Mark
Run Code Online (Sandbox Code Playgroud)

这有可能在linq?

谢谢

Ani*_*Ani 7

你可以这样做:

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()
             };
Run Code Online (Sandbox Code Playgroud)

但这看起来真的像黑客; 我建议你设计容器类,以防止这个"重复日期"场景首先发生.例如实现ILookup<DateTime, Person>IDictionary<DateTime, List<Person>>HashSet<PeopleInfo>使用StartDate平等.