1

我有一个对 (key, val) 的列表,其中键和值都是字符串。我想用重复键聚合元组。

For (key1, val1), (key2, val2), (key3, val3), (key1, val4), (key2, val5) 

我要输出

(key1, val1+val4), (key2, val2+val5)

这是我当前的查询

var duplicates = Contents.Records.SelectMany(x => x.Users).Select(x => new { Name = x.Name, ID= x.ID}).GroupBy(x => x.ID).Select(x => new { x.Key, Names = x.Select(p=>p.Name).Aggregate((a,b) => a +","+b)}).ToArray();

但在每个重复条目的末尾,成员名称为空。

数据如下,每条Records都有一个List Users。每个用户都有一个名称和一个 ID。我究竟做错了什么?

4

1 回答 1

1

Aggregate看起来它应该完成这项工作。但我从来不喜欢Aggregate。语法不直观(在我看来)。通常其他方式看起来更清晰。拿这个:

Tuple<string,string>[] tuples = { 
                                    Tuple.Create("key1", "val1"), 
                                    Tuple.Create("key2", "val2"), 
                                    Tuple.Create("key3", "val3"), 
                                    Tuple.Create("key1", "val4"), 
                                    Tuple.Create("key2", "val5")
                                };
tuples.GroupBy(t => t.Item1, t => t.Item2)
      .Select(g => Tuple.Create(g.Key, string.Join("+", g)))
      .Dump(); // Linqpad output command

结果:

key1    val1+val4
key2    val2+val5
key3    val3
于 2013-04-18T22:23:01.360 回答