微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用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 )
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。