0

我有一个创建对象列表(现在是 9 个元素)的 linq,例如:

Object 1:   Title: Title1
            Value: Marco

Object 2:   Title: Title2
            Value: Paolo

Object 3:   Title: Title3
            Value: Giovanni

Object 4:   Title: Title1
            Value: Edoardo

Object 5:   Title: Title2
            Value: Chris

Object 6:   Title: Title3
            Value: John

Object 7:   Title: Title1
            Value: Manuel

Object 8:   Title: Title2
            Value: Lorenz

Object 9:   Title: Title3
            Value: Ernest

而不是这 9 个对象,我只想返回 3 个对象(按标题分组),每个对象的值是每个分组上每个值的联合列表。所以结果应该是这样的:

Object 1:   Title: Title1
            Value[]: Marco, Edoardo, Manuel

Object 2:   Title: Title2
            Value[]: Paolo, Chris, Lorenz

Object 3:   Title: Title3
            Value[]: Giovanni, John, Ernest

在Linq上可以吗?或者我需要迭代我的列表并手动管理它?

PS注意这只是一个例子!在我的场景中,对于每个对象,我有比 Title 和 Value 更多的元素,例如 10 个元素。

4

1 回答 1

4
var query = objects.GroupBy(o => o.Title)
                   .Select(g => new  
                   {
                       Title = g.Key,
                       Value = g.Select(x => x.Value).ToArray()
                   });

或者使用查询语法:

var query = from o in objects
            group o by o.Title into g
            select new 
                   {
                       Title = g.Key,
                       Value = g.Select(x => x.Value).ToArray()
                   });

更新考虑使用简单的分组 - 这将返回按标题分组的对象

var query = objects.GroupBy(o => o.Title);
于 2012-12-07T10:13:00.410 回答