我有一个对象,它有一个日期和人员列表,一个人有名字和姓氏.就像是:
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?
谢谢
你可以这样做:
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平等.