将自定义List中的属性值与LINQ相结合

时间:2012-09-19 19:34:47

标签: linq list

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

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获取新人员一次,如果重复获取State值并将其放入以逗号分隔的新Person对象中。例如,新列表将是

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

有没有办法实现这个目标?

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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();