0

假设我有一个人员列表,在列表中我有以下对象:

Person = { ID= 1, State="CA"}
Person = { ID= 2, State="PA"}
Person = { ID= 1, State="NY"}
Person = { ID= 1, State="OH"}
Person = { ID= 3, State="FL"}
Person = { ID= 2, State="KC"}

如何获得一个新列表,其中我只能通过 ID 获得新的 Persons 一次,如果重复获取 State 值并将其放入以逗号分隔的新 Person 对象中。例如,新列表将是

Person = { ID= 1, State="CA,NY,OH"}
Person = { ID= 2, State="PA,KC"}
Person = { ID= 3, State="FL"}

有没有办法做到这一点?

4

2 回答 2

1

使用Enumerable.GroupByString.Join

var result = persons.GroupBy(p => p.ID)
                    .Select(g => new Person{
                        ID = g.Key,
                        State = string.Join(",", g.Select(p => p.State))
                    }).ToList();
于 2012-09-19T19:37:07.653 回答
0

这是扩展方法版本

  var persons = Person.GroupBy(p => p.ID).Select(p => new Person() { ID = p.Key, State = String.Join(",", p.Select(p2 => p2.State).ToArray()) }).ToList();
于 2012-09-19T19:39:08.683 回答