使用Linq分组,排序和连接字符串

问题描述

| 假设我有以下数据
Key    ID      Data
A      1       Hello
A      2       World
B      2       Bar
B      1       Foo
我正在寻找结果
A     HelloWorld
B     FooBar
我正在努力使语法正确无误-我正在尝试使用Aggregate,但是我不确定是否可以(或应该)使用SelectMany 我将不胜感激。
    Dim data = result.Rows.
                    GroupBy(Function(r) r.Key).
                    Select(Function(g) g.OrderBy(Function(s) s.ID)).
                    Aggregate(New StringBuilder,Function(cur,nxt)                   
                              cur.Append(nxt.First.Data))
谢谢 西蒙     

解决方法

        我认为此(C#)应该有效:
var data = from r in result.Rows
           group r by r.Item(\"Key\").ToString() into g
           select new {
               g.Key,Joined = string.Join(\"\",g.OrderBy(s => s.Item(\"ID\"))
                                         .Select(s => s.Item(\"Data\")))
           };
    ,        这是另一种实现方式:
var source = new Item[]
{
    new Item { Key = \"A\",ID = 1,Data = \"Hello\" },new Item { Key = \"A\",ID = 2,Data = \"World\" },new Item { Key = \"B\",Data = \"Bar\" },Data = \"Foo\" }
};

var results = source
    .GroupBy(item => item.Key)
    .Select(group => group
        .OrderBy(item => item.ID)
        .Aggregate(new Item(),(result,item) =>
            {
                result.Key = item.Key;
                result.Data += item.Data;
                return result;
            }));
    ,        
Dim result = result.Rows.GroupBy(Function(r) r.Key).Select(Function(g) New With { _
    g.Key,_
    String.Join(\"\",g.OrderBy(Function(r) r.ID)) _
})
    ,        您不想汇总组。您想将每个组的元素加在一起。 如果您希望查询执行此操作,则
Dim data = result.Rows
   .GroupBy( )
   .Select(Function(g) g
     .OrderBy( )
     .Aggregate( )
   )
如果那个匿名函数开始变得太冗长而无法编写,则只需创建一个接受
IGrouping<int,Row>
并将其转换为所需内容的方法即可。然后像这样调用它:
Dim data = result.Rows
   .GroupBy( )
   .Select( myMethod )
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...